【问题标题】:How to execute a update statement using Oracle ODP.Net in C#如何在 C# 中使用 Oracle ODP.Net 执行更新语句
【发布时间】:2011-04-23 18:09:03
【问题描述】:

我正在使用 Oracle.DataAccess.Client 在我的 ASP.Net 应用程序中使用 Oracle 数据库。 MSDN 中没有 ODP.Net 的帮助文档,Oracle 的文档真的很糟糕。我找不到这个简单问题的答案。

不构建dataset对象和更新dataset就不能执行简单的更新语句吗?

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

【问题讨论】:

  • ODP.Net 实现了 IDbCommand、IDbConnection 和 IDbDataAdapter 为什么你不能使用它们来准备和执行你的更新语句。

标签: c# asp.net odp.net


【解决方案1】:

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

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 更新语句,在这个示例中,我展示了一种设置参数化查询的方法,您应该始终使用参数化查询。设置命令后,您只需调用 ExecuteNonQuery 即可实际执行命令。

【讨论】:

  • 甜蜜!谢谢!虽然我找不到“AddWithValue”。 ExecuteNonQuery 是关键,我在没有参数化查询的情况下尝试了它并且它有效。我想我可以从这里开始即兴创作。真的很感谢你的时间!
  • Karthik,使用参数化查询的好处是它为你做了所有的 SQL 注入保护。
  • 嘿!我只会更改一些内容以添加允许 Oracle 执行更新命令的事务控制:code OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction(IsolationLevel.ReadCommitted); cmd.Transaction = oratrans; . . . cmd.ExecuteNonQuery(); oratrans.Commit();你的,
【解决方案2】:

所以经过一番摸索和解决这个问题后,我发现我用来在连接命令中添加新参数的方法如下。我没有找到上一篇文章中所述的方法。请注意,我正在使用一个用于传递值的查询对象。

  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;
        }
    }

【讨论】:

  • 看起来您要插入两次。两个cmd.ExecuteNonQuery();
【解决方案3】:

除了@Chris 的回答,这里是OracleParameter 类的文档页面,其中包含使用OracleCommand 执行Updates 的示例代码。

编辑:这是ODP.net documentation 的入口点。

【讨论】:

  • 您提供的示例代码的链接是关于如何使用 OracleDataReader 获取数据,而不是关于如何更新数据(根据我最初的问题)。我已经浏览了 ODP.net 文档,但找不到用于更新的类似代码示例。我希望 MSDN 已经记录了这一点:(。
猜你喜欢
  • 2013-09-26
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2013-11-11
相关资源
最近更新 更多