使用 C# 在 oracle 数据库中更新多行的最佳方法

Posted

技术标签:

【中文标题】使用 C# 在 oracle 数据库中更新多行的最佳方法【英文标题】:Best way to UPDATE multiple rows in oracle database using C# 【发布时间】:2011-09-14 20:31:36 【问题描述】:

我有一个可变的 ID 列表。我想更新 Oracle 数据库中每个 ID 的“状态”列。我已经搜索并遇到了以下选项:

OracleDataAdapter - 没有数据表,只有 ID 包含 UPDATE 语句的 for 循环(可能是数千个 UPDATE) 存储过程 - 希望不必这样做

任何帮助将不胜感激。谢谢

【问题讨论】:

没必要这么反对存储过程,这些还不错:) 在这里寻找一些想法:***.com/questions/2528181/… 我没有看到任何问题...您尝试过任何选项吗?什么没有奏效 ?请显示一些代码... 顺便说一句,一个带有许多命令的 for 循环发送到数据库,但所有命令都在同一个事务中,理论上也不算太糟糕,除了你做了很多往返到具有少量数据传输的服务器,而不是具有更多数据的服务器...我一般喜欢第二个,但这是有争议的... 如果它是一个变量列表并且可以变得很大,那么带有事务的循环肯定是要走的路。 感谢您的回复。我采用了 for 循环方法。 【参考方案1】:

如果您已经知道 Id,则可以构建一个 in 子句并执行 ExecuteScalar:

更新某些表 设置状态 = '已发货' where sometableid in (10,17,19,20,89)

【讨论】:

【参考方案2】:

看看这个帖子。

https://forums.oracle.com/forums/thread.jspa?threadID=638673

它谈到了使用参数数组,这可能非常适合您尝试做的事情。

【讨论】:

【参考方案3】:

感谢您的回复。我想像下面那样做,我只是关心保持连接打开这么多迭代。

using (OracleConnection oracleConnection = new OracleConnection(connection))
                
                    oracleConnection.Open();

                    OracleCommand Command = new OracleCommand();
                    Command.Connection = oracleConnection;
                    Command.CommandType = CommandType.Text;
                    status = "A";
                    foreach (var memberID in MemberIDs)
                    
                        sqlStatement = " UPDATE " + " ourdbtable" + " Set userstatus = '" + status + "' WHERE " + "memberid= " + memberID;
                        // command
                        Command.CommandText = sqlStatement;
                        Command.ExecuteNonQuery();
                    
                

【讨论】:

以上是关于使用 C# 在 oracle 数据库中更新多行的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库多行-> c# [关闭]

Oracle 11g - 插入多行的最有效方式

Oracle 12c 用相同的数据更新多行

C#如何查找dataset某行数据?

oracle update如何更新多行数据

C#如何查找dataset某行数据