Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当某些命令可能引发异常时,使用单个事务执行多个sqlcommand_C#_Sql Server_Transactions - Fatal编程技术网

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

C# 当某些命令可能引发异常时,使用单个事务执行多个sqlcommand,c#,sql-server,transactions,C#,Sql Server,Transactions,我试图使用一个事务在一个连接中执行多个SqlCommands。我正在使用下面链接中的一个示例,其中只有一个修改是,我为每个cmd.ExecuteNonQuery()添加了try/catch 我不想在任何命令失败时中止事务,而是希望在应用程序端处理它。并希望最终提交更改 但当我们在上面的调用中得到异常时,事务对象被释放,我在最后尝试提交时得到了无效的操作异常。即使某些命令失败,关于如何提交事务的任何指针都将非常有用 下面是我正在使用的代码片段 using (SqlConnection conne

我试图使用一个事务在一个连接中执行多个SqlCommands。我正在使用下面链接中的一个示例,其中只有一个修改是,我为每个
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();

}

答案肯定不是将所有语句分组到一个事务中

或者,如果有些应该使整个事务失败,但有些没有,则将应该使整个事务失败的事务分组到单个事务中,并单独运行其他语句


您完全确定使用/不使用事务的效果是什么吗?

这里没有使用事务的目的。只需删除事务,它会按照您的预期工作。您能给我们展示一些您正在一起批处理的命令的示例吗?Hi@selvakumar,没有事务,我会看到3倍的性能下降。但是如果我使用事务并且不提交,我不会得到异常,但可以看到性能的改善。Hi@spodger,我想知道是否有任何方法可以将成功的命令执行合并到一个事务中,而忽略失败的命令执行。因为在链接中提供的统计数据中,我可以看到使用事务时性能至少提高了8倍。