当某些命令可能引发异常时,使用单个事务执行多个sql命令

时间:2017-10-06 11:40:01

标签: c# sql-server transactions

我正在尝试使用事务在单个连接中执行多个SqlCommands。我正在使用以下链接Use Batching in Sql to improve performance中的示例,只有一个修改,我为每个cmd.ExecuteNonQuery();添加了try / catch。

如果任何命令失败并且想要在应用程序端处理它,我不想中止事务。并希望最终提交更改。

但是当我们在上面调用期间遇到异常时,事务对象被处理掉了,因此在尝试最后提交时我得到了无效的操作异常。即使某些命令失败,任何有关如何提交事务的指针都会非常有用。

以下是我正在使用的代码段。

 using (SqlConnection connection = new SqlConnection(CloudConfigurationManager.GetSetting("Sql.ConnectionString")))
{
   conn.Open();
   SqlTransaction transaction = conn.BeginTransaction();

   foreach (string commandString in dbOperations)
   {
      SqlCommand cmd = new SqlCommand(commandString, conn, transaction);
      try{
         cmd.ExecuteNonQuery();
      }
      catch(Exception ex){
        //some exception handling. 
      }
   }

   transaction.Commit();

}

1 个答案:

答案 0 :(得分:1)

当然,答案不是在一次交易中对所有陈述进行分组吗?

或者,如果某些事务应该使整个事务失败,但有些人不会在单个事务中将那些应该使整个事务失败的事务分组并单独运行其他事务。

您是否完全确定使用/不使用交易的影响是什么?