2011-04-23 52 views
5

我使用Oracle.DataAccess.ClientASP.Net應用與的Oracle數據庫工作執行使用Oracle ODP.Net一個更新語句。沒有幫助文檔MSDN對於ODP.NetOracle的文檔確實很糟糕。我無法找到這個簡單問題的答案。如何在C#

無法執行簡單的更新語句而無需構建dataset對象並更新dataset

如何使用執行更新語句Oracle ODP.Net in C#

+1

ODP.Net實現IDbCommand,IDbConnection和IDbDataAdapter爲什麼你不能用它們來準備和執行你的Update語句。 – adt 2011-04-23 18:11:32

回答

15

我需要檢查的確切語法,但這裏是一些簡單的代碼,把我的頭頂部

using (OracleConnection con = new OracleConnection(...)) 
{ 
    con.Open(); 
    OracleCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "update table set col1 = :param1, col2 = :param2 where key = :keyValue"; 
    cmd.Parameters.AddWithValue("param1", 1); 
    cmd.Parameters.AddWithValue("param2", "Text data"); 
    cmd.Parameters.AddWithValue("keyValue", "1"); 
    cmd.ExecuteNonQuery(); 
} 

上面創建一個命令對象設置的命令,執行一個SQL Update語句,在這個例子我展示了一種設置參數化查詢的方法,你應該總是使用參數化查詢。一旦命令設置完畢,您只需撥打ExecuteNonQuery即可執行該命令。

+1

甜!謝謝!雖然我找不到「AddWithValue」。 ExecuteNonQuery是關鍵,我試過了一個參數化查詢,它工作。我想我可以從這裏即興創作。真的很感謝你的時間! – 2011-04-23 20:26:47

+0

Karthik使用參數化查詢的優勢在於它爲您提供所有SQL注入保護。 – SurfingSanta 2015-07-23 23:40:29

+0

和也!我只想修改一些東西來添加允許Oracle執行更新命令的事務控制: 'code' OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction(IsolationLevel.ReadCommitted); cmd.Transaction = oratrans; 。 。 。 cmd.ExecuteNonQuery(); oratrans.Commit(); 你的, – 2017-03-08 18:10:42

0

除@ Chris的回答外,這裏是OracleParameter類的文檔頁面,其中使用OracleCommand執行Update s的示例代碼。

編輯:這是ODP.net documentation的入口點。

+1

你提供的示例代碼的鏈接是關於如何使用OracleDataReader獲取數據,而不是如何更新數據(按照我最初的問題)。我已經瀏覽了ODP.net文檔,找不到更新的類似代碼示例。我希望MSDN已經記錄了這個:(。 – 2011-04-23 20:36:16

1

因此,經過一番調查和工作了一段時間,我發現我用來給連接命令添加一個新參數的方法如下。我沒有找到上一篇文章中提到的方法。請注意,我正在使用一個查詢對象,我正在傳遞值。

public Boolean InsertMethod(Query _query) 
    { 
     var success = false; 
     var queryString = string.Format(@"INSERT INTO TABLE(ID, OWNER, TEXT) VALUES (TABLE_SEQ.NEXTVAL,:OWNER, :TEXT)"); 
     try 
     { 
      using (OracleConnection con = new OracleConnection(ConString)) 
      { 
       con.Open(); 
       OracleCommand cmd = con.CreateCommand(); 
       cmd.CommandText = queryString; 
       cmd.Parameters.Add("OWNER", _query.Owner); 
       cmd.Parameters.Add("TEXT", _query.Text);   

       int rowsUpdated = cmd.ExecuteNonQuery(); 

       if (rowsUpdated > 0) success = true; 
      } 

      return success; 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex); 
      throw; 
     } 
    } 
+0

看起來像你插入兩次。'cmd.ExecuteNonQuery();' – Halter 2017-01-23 20:32:46

+1

你是對的,謝謝。它已被編輯。 – nshouppuohsn 2017-01-27 04:03:11