2017-03-08 73 views
0

我按照以下步驟更新Oracle表:關閉Oracle表更新的正確方法 - C#。 NET

  • 首先計算觀察的集合;屬性表示一列。在WPF數據網格中顯示此信息。我將這些信息保存到Oracle數據庫。這似乎工作正常。
  • 網格打開時,我更改了某些單元格的值。我將修改後的值重新保存到表格中。這也很好。
  • 我嘗試獲取更新/修改的值來執行一些其他計算。我注意到我的程序仍然使用最初保存的值;它沒有選擇修改後的值,即使數據庫顯示正確的值。 是否發生是因爲我沒有正確提交/關閉Oracle連接?

這裏是我的代碼,將數據保存到Oracle表:

using (OracleConnection thisConnection = new OracleConnection(connectionname)) 
{ 
    string query = "INSERT INTO TEST(WellBore,PDate, Pressure,Temperature)VALUES(:WellBore,:PDate,:Pressure,:Temperature)"; 

    OracleCommand myAccessCommand = new OracleCommand(query, thisConnection); 

    var sdate = Datetime.Now.Date.ToShortDateString(); 

    myAccessCommand.Parameters.Add("WellBore", OracleDbType.NVarchar2, 20).Value = 「ABC」; 
    myAccessCommand.Parameters.Add("PDate", DateTime.Parse(sdate)); 
    myAccessCommand.Parameters.Add("Pressure", OracleDbType.Decimal).Value = 1000; 
    myAccessCommand.Parameters.Add("Temperature ", OracleDbType.Decimal).Value = 50; 
    thisConnection.Open(); 
    myAccessCommand.ExecuteNonQuery(); 
    thisConnection.Dispose(); 
} 

所以我相信我的問題我要如何提交連接?

+2

不要調用'thisConnection.Dispose()',它將在您使用塊 – Artiom

+1

退出時處理,您需要一個OracleTransaction,並且您需要提交 – tbone

+1

關閉主題,但您可能想要刪除多餘的空間',:溫度)'和'.Add(「溫度」,' –

回答

1

下面是一個在事務中使用插入語句的示例。它也抓住值返回ID,這可能不是你的情況是必要的,但無論如何:

  int event_id = 0; 
      using (OracleConnection oraConn = new OracleConnection(connStr)) 
      { 
       string cmdText = @"insert into EVENT 
        (EVENT_NAME, EVENT_DESC) 
        values 
        (:EVENT_NAME, :EVENT_DESC) 
        RETURNING EVENT_ID INTO :EVENT_ID 
        "; 

       using (OracleCommand cmd = new OracleCommand(cmdText, oraConn)) 
       { 
        oraConn.Open(); 
        OracleTransaction trans = oraConn.BeginTransaction(); 
        try 
        { 
         OracleParameter prm = new OracleParameter(); 
         cmd.BindByName = true; 
         prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); prm.Value = "SOME NAME"; cmd.Parameters.Add(prm); 
         prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); prm.Value = "SOME DESC"; cmd.Parameters.Add(prm); 
         prm = new OracleParameter("EVENT_ID", OracleDbType.Int32, ParameterDirection.ReturnValue); cmd.Parameters.Add(prm); 

         cmd.ExecuteNonQuery(); 
         trans.Commit(); 
         // return value 
         event_id = ConvertFromDB<int>(cmd.Parameters["EVENT_ID"].Value); 
        } 
        catch 
        { 
         trans.Rollback(); 
         throw; 
        } 
        finally 
        { 
         trans.Dispose(); 
        } 
        oraConn.Close(); 
       } 
      } 

注:「ConvertFromDB」只是一個普通的返回值轉換爲它相當於.NET(一個int在這種情況下)。同樣,如果你沒有捕獲返回值,你不需要擔心。

相關問題