在单个事务中发送多个SQL命令我有一个很大的INSERTINTO...字符串列表。目前我运行它们:using(SqlConnectionconnection=newSqlConnection(connectionString)){connection.Open();foreach(varcommandStringinsqlCommandList){SqlCommandcommand=newSqlCommand(commandString,connection);命令.ExecuteNonQuery();我看到每个ExecuteNonQuery()也执行提交。有没有办法在单个事务中插入所有行(最后提交)?我想要单个事务的原因是使我的“插入”过程更快。单笔交易也会更快吗?如果在一个线程中执行多个查询,推荐使用SQL事务,可以这样:SqlTransactiontrans;尝试{SqlConnection连接=newSqlConnection(connectionString);connection.Open();trans=connection.BeginTransaction();foreach(varcommandStringinsqlCommandList){SqlCommandcommand=newSqlCommand(commandString,connection,trans);命令.ExecuteNonQuery();}trans.Commit();}catch(Exceptionex)//发生错误{trans.Rollback();//Handelerror}你可能只用一个事务和命令就可以获得一些性能,像这样:使用(SqlTransactiontrans=connection.BeginTransaction()){使用(SqlCommandcommand=newSqlCommand("",connection,trans)){command.CommandType=System.Data.CommandType.Text;foreach(varcommandStringinsqlCommandList){command.CommandText=commandString;命令。执行非查询();}}trans.Commit();}}catch(Exceptionex)//erroroccurred{//Handelerror}}之后,但是如果要将所有值插入到同一个表中,将SQL插入代码“insertintotablex(f1,f2,f3,...)values(@F1,@F2,@F3..)”创建命令并添加参数@F1...,然后在命令上设置Prepare标志。现在,当您遍历要插入的值列表时,您可以将它们设置为适当的参数并执行ExecuteNonQuery。SQL将预解析命令字符串一次,然后每次都使用新参数。这有点快了。最后,您可以通过附加“;”在单个命令中执行多个SQL语句。如果必须执行整个字符串,则对每个语句。您可以将许多这些命令组合在一起,并向SQLServer发出单个请求来执行它们。您可以对每个使用Parallel。以上就是《C#学习教程:单事务发送多条SQL命令》的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注—SqlConnectionconnection=newSqlConnection(connectionString)){ListsqlCommandList=newList();connection.Open();Parallel.ForEach(sqlCommandList,commandString=>{SqlCommandcommand=newSqlCommand(commandString,connection);command.ExecuteNonQuery();});}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
