使用 ODP.NET 的 Oracle 批量更新
Posted
技术标签:
【中文标题】使用 ODP.NET 的 Oracle 批量更新【英文标题】:Oracle bulk updates using ODP.NET 【发布时间】:2012-09-17 17:50:46 【问题描述】:看着this example 进行批量插入,我认为使用相同的逻辑将适用于更新。我尝试了以下方法,看看它是否会起作用,但它不起作用:
string sql = "update TEST set NAME=:newName where NAME=:name";
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText = sql;
command.CommandType = System.Data.CommandType.Text;
command.BindByName = true;
command.ArrayBindCount = 5;
string[] originalName = "Test1", "Test2", "Test3", "Test4", "Test5" ;
string[] newName = "New Test1", "New Test2", "New Test3", "New Test4", "New Test5" ;
command.Parameters.Add(":newName", OracleDbType.Varchar2, originalName, System.Data.ParameterDirection.Input);
command.Parameters.Add(":name", OracleDbType.Varchar2, newName, System.Data.ParameterDirection.Input);
command.ExecuteNonQuery();
connection.Close();
这不适用于更新吗?有没有办法像我链接的示例中的批量插入一样轻松地进行批量更新?
【问题讨论】:
【参考方案1】:原来我的参数名称被翻转了。我花了很长时间才找到它。
【讨论】:
【参考方案2】:您不能将数组作为参数传递。
你可以做的是遍历你的数组并为数组的每个位置调用更新(这实际上不是“批量”插入),或者你可以使用类似的东西:
WHERE NAME in ("Test1", "Test2", "Test3", "Test4", "Test5")
等等
【讨论】:
其实可以的。看我的回答。 嗯,很有趣。如果两个数组上的iten数不同会怎样? 不确定。我猜它会抛出异常。以上是关于使用 ODP.NET 的 Oracle 批量更新的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 oracleBulkCopy (ODP.NET) 检查插入的行数
.NET Core 使用ODP.NET Core连接操作Oracle数据库
使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解转