2011-04-23 56 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