使用 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 批量更新的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 通过存储过程进行批量插入。花费太多时间

如何通过 oracleBulkCopy (ODP.NET) 检查插入的行数

.NET Core 使用ODP.NET Core连接操作Oracle数据库

使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解转

在 odp.net 上使用带有 number 属性的 oracle 对象类型

如何使用 ODP.Net 传递字节数组?