2013-04-11 116 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