我想更新多行,如下所示
update mytable set s_id = {0} where id = {1}
Run Code Online (Sandbox Code Playgroud)
(这s_id是基于一些复杂的逻辑评估的).
出于性能原因,更新应该分批进行.有没有办法批处理更新语句并通过单个执行语句执行批处理?我知道在JAVA中我们可以通过JDBC实现这一点.在C#中有类似的方式吗?
提前致谢
Ada*_*Dev 22
是的,您可以使用SqlDataAdapter.
SqlDataAdapter具有InsertCommand和UpdateCommand属性,允许您指定用于将新行插入数据库的SQLCommand和用于分别更新数据库中的行的SqlCommand.
然后,您可以将DataTable传递给dataadapter 的Update方法,它会将语句批处理到服务器 - 对于DataTable中作为新行的行,它会执行INSERT命令,对于已修改的行,它会执行UPDATE命令.
您可以使用UpdateBatchSize属性定义批处理大小.
这种方法允许您处理大量数据,并允许您以不同方式很好地处理错误,即如果特定更新遇到错误,您可以告诉它不要抛出异常但继续执行剩余的通过设置ContinueUpdateOnError属性进行更新.
Jef*_*nal 11
是的,您可以构建纯文本SQL命令(为安全性参数化),如下所示:
SqlCommand command = new SqlCommand();
// Set connection, etc.
for(int i=0; i< items.length; i++) {
command.CommandText += string.Format("update mytable set s_id=@s_id{0} where id = @id{0};", i);
command.Parameters.Add("@s_id" + i, items[i].SId);
command.Parameters.Add("@id" + i, items[i].Id);
}
command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)