如何在C#中使用Oracle ODP.Net执行更新语句

Kar*_*san 7 c# asp.net odp.net

我使用的Oracle.DataAccess.Client一起工作甲骨文在我的数据库ASP.Net应用程序.有没有在帮助文档MSDNODP.Net甲骨文的文档真的很糟糕.我无法找到这个简单问题的答案.

是否无法在不构建dataset对象和更新对象的情况下执行简单的更新语句dataset

如何在C#中使用Oracle ODP.Net执行更新语句?

Chr*_*lor 17

我需要检查确切的语法,但这里有一些快速的代码

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();
}
Run Code Online (Sandbox Code Playgroud)

上面创建一个命令对象设置命令以执行SQL Update语句,在这个例子中我展示了一种设置参数化查询的方法,你应该总是使用参数化查询.设置命令后,您只需调用ExecuteNonQuery实际执行命令即可.

  • 甜!谢谢!虽然找不到“ AddWithValue”。ExecuteNonQuery是关键,我在没有参数化查询的情况下进行了尝试,并且有效。我想我可以从现在开始即兴创作。真的很感谢您的时间! (2认同)
  • Karthik,使用参数化查询的优点是它可以为您执行所有SQL注入保护。 (2认同)

nsh*_*hsn 5

因此,经过一番侦查并解决了一段时间后,我发现我用来向连接命令添加新参数的方法如下。我没有找到上一篇文章中所述的方法。请注意,我正在使用我正在传递值的查询对象。

  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;
        }
    }
Run Code Online (Sandbox Code Playgroud)