C#学习教程:在单个事务中发送多个SQL命令分享


在单个事务中发送多个SQL命令

我有一个很大的INSERT INTO ...字符串列表。 目前我运行它们:

 using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); foreach (var commandString in sqlCommandList) { SqlCommand command = new SqlCommand(commandString, connection); command.ExecuteNonQuery(); } } 

我看到每个ExecuteNonQuery()也执行提交。

  1. 有没有办法在单个事务中插入所有行(最后提交)?
  2. 我想要一个单一事务的原因是让我的“插入”过程更快。 单笔交易是否也会更快?

如果你在一个线程中执行多个查询,建议使用SQL事务,你可以像这样:

  SqlTransaction trans; try { SqlConnection connection = new SqlConnection(connectionString); connection.Open(); trans = connection.BeginTransaction(); foreach (var commandString in sqlCommandList) { SqlCommand command = new SqlCommand(commandString, connection,trans); command.ExecuteNonQuery(); } trans.Commit(); } catch (Exception ex) //error occurred { trans.Rollback(); //Handel error } 

您可能只使用一个事务和命令就可以获得一些性能,如下所示:

 using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); using (SqlTransaction trans = connection.BeginTransaction()) { using (SqlCommand command = new SqlCommand("", connection,trans)) { command.CommandType = System.Data.CommandType.Text; foreach (var commandString in sqlCommandList) { command.CommandText = commandString; command.ExecuteNonQuery(); } } trans.Commit(); } } catch (Exception ex) //error occurred { //Handel error } } 

稍晚,但是如果要将所有值插入到同一个表中,请将SQL插入代码“插入tablex(f1,f2,f3,…)值(@ F1,@ F2,@ F3 .. )”。 创建命令并添加参数@ F1 …,然后在命令上设置Prepare标志。 现在,当您遍历要插入的值列表时,可以将它们设置为适当的参数,然后执行ExecuteNonQuery。 SQL将预解析命令字符串一次,然后每次使用新参数。 这有点快。

最后,您可以通过附加’;’在单个命令中执行多个SQL语句 如果你必须执行整个字符串,请到每个语句。 您可以将许多这些命令组合在一起,并向SQL Server发出一个请求来执行它们。

您可以为每个使用Parallel

上述就是C#学习教程:在单个事务中发送多个SQL命令分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

  using (SqlConnection connection = new SqlConnection(connectionString)) { List sqlCommandList = new List(); connection.Open(); Parallel.ForEach(sqlCommandList, commandString => { SqlCommand command = new SqlCommand(commandString, connection); command.ExecuteNonQuery(); }); } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1032017.html

发表评论

邮箱地址不会被公开。 必填项已用*标注