2015-04-23 26 views
0

我是一名初學者,在更新存儲在Oracle數據庫中的一條記錄時遇到問題,並在C# .NET中編寫。連接成功,插入和刪除查詢正常工作。請建議我該怎麼做。我應該使用什麼語法來更新用Oracle數據庫以C#.net編寫的記錄

我的代碼是:

private void btnUpadate_Click(object sender, EventArgs e) 
{ 
    OracleConnection con = null; 
    try 
    { 
     con = new OracleConnection(); 
     string constr = "Data source=XE; User ID=cloudester; Password=cloudester123;"; 

     if (con.State != ConnectionState.Open) 
     { 
      try 
      { 
       con.ConnectionString = constr; 
       con.Open(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error Caught"); 
      } 
     } 
     if (con.State == ConnectionState.Open) 
     { 
      OracleCommand cmd = new OracleCommand(); 
      cmd.CommandText = "Update EMP_DETAIL set Name= :Name, Age=:Age where EmpId=:EmpId"; 
      cmd.Connection = con; 
      cmd.Parameters.Add(new OracleParameter("EmpId", OracleDbType.Varchar2)).Value = txtEmpId.Text; 
      cmd.Parameters.Add(new OracleParameter("Name", OracleDbType.Varchar2)).Value = txtName.Text; 
      cmd.Parameters.Add(new OracleParameter("Age", OracleDbType.Int16)).Value = int.Parse(txtAge.Text); 
      int i = cmd.ExecuteNonQuery(); 

      MessageBox.Show(i.ToString()); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 

    finally 
    { 
     if (con != null) 
     { 
      con.Dispose(); 
     } 
    } 
} 
+1

當你的代碼執行時會發生什麼?例外? – Sohaty

+0

不,它不會拋出任何異常,它只是執行時沒有更新db – Akshay

+0

另一方面,使用'using'語句確保即使在錯誤時也能正確關閉它,而不是使用'con.State!= ConnectionState .Open'。 –

回答

1

你應該打電話的ExecuteNonQuery之前分配給真正的財產cmd.BindByName或填充參數集合中正確的順序(如參數出現在SQL命令文本)

+0

謝謝Sohaty我已經嘗試過一個,現在它的工作原理。再次感謝 – Akshay

1

可能有'執行不更新數據庫'的兩個原因。

  1. 不要忘記做COMMIT。在提交之前,更改對外部會話不可見。會話可以使用自動提交或其他的東西,但..強制它。

  2. 如果where子句錯誤,UPDATE語句可以更新0條記錄,即它只是找不到指定的記錄。通常你可以檢查記錄受影響的計數器(我猜這是ExecuteNonQuery的結果)

+0

請告訴我如何我可以提交。我應該使用什麼語法? – Akshay

+0

是的,'ExecuteNonQuery'返回受影響的行數。除非您之前調用'BeginTransaction()'方法,否則所有命令都是隱式提交的。據我所知,在ODP.NET連接上沒有「自動提交」屬性。 –

相關問題