2013-04-11 119 views
3

我知道我是如何做到这一点的,我之前已经做到了,但是下面的代码在下面的更新语句中挂起了(不抛出异常),我没有看到它的原因。任何人都能看到为什么如何执行更新查询?

我不认为很重要,但idPersonbelongs的主键是外键。

在任何sugest concurrence问题之前,我是唯一在桌子上工作的人。 命令的创建是这样:

public static String upDatePersonBelonging(Int32 personId,Int32 groupId) 
{ 
    String error; 
    if ((error = openConnection()) != "") 
     return error; 

    OracleCommand command = 
     new OracleCommand("UPDATE person SET belongs = :belongs where id = :id ", 
         connection); 

    addParameter(command, "belongs", OracleDbType.Int32, groupId); 
    addParameter(command, "id", OracleDbType.Int32, personId); 

    return runCommand(command); 
} 

的执行是这样:

private static String runCommand(OracleCommand command) 
{ 
    String error = ""; 

    try 
    { 
     command.ExecuteNonQuery(); // here it hangs 
    } 
    catch (Exception e) 
    { 
     error = e.Message; 
    } 
    finally 
    { 
     connection.Close(); 
    } 

    return error; 
} 

开口函数如下:

private static String openConnection() 
{ 
    try 
    { 
     // create an open the connection   
     connection = new OracleConnection(_connStr); 

     // open the connection 
     connection.Open(); 
    } 
    catch(Exception e) 
    { 
     return e.Message; 
    } 

    return ""; 
} 

附加参数代码:

private static void addParameter(OracleCommand command, String name, OracleDbType type, Object value) 
{ 
    command.Parameters.Add(name, type); 
    command.Parameters[command.Parameters.Count-1] = new OracleParameter(name, value); 
} 
+1

可以更新用sqlplus表(登录为同一用户在连接字符串中)? – paul 2013-04-11 11:28:48

+0

你调试了你的代码吗? – 2013-04-11 11:32:06

+0

是的,我可以在SQLDevloper和SQL plus中更新de table。是的,我调试它并挂在那里,不再显示,就像在一个infinit循环中一样。 – 2013-04-11 11:37:51

回答

1

Co德似乎是正确的。

我有三个想法:

  1. 更新可能会很长的操作,如果有表中的许多行,只是你必须等待(你可以使用一些其他的代码/工具来完成这个查询和比较倍)。
  2. 显示为addParameter的方法。
  3. 也许某个其他进程正在处理这个表并锁定它。

编辑

addParameter方法很奇怪。首先添加参数,然后创建一个新的参数。 我会尝试,而像这样(没有测试 - 我有没有可能):

private static void addParameter(OracleCommand command, String name, 
    OracleDbType type, Object value) 
{ 
    OracleParameter p = new OracleParameter(name, value); 
    p.DbType = type; 
    command.Parameters.Add(p); 
} 
+0

1和3不是,2我不明白 – 2013-04-11 11:38:41

+0

你可以发布'addParameter'方法的代码吗? – psur 2013-04-11 11:40:44

+0

ahh ok,做完了 – 2013-04-11 11:46:26