事务处理器内的C#,SQL SP通过超时结束事务

时间:2018-03-06 15:50:53

标签: c# stored-procedures timeout transactionscope

使用代码:

hello
example
one
cheerio
another example
two

如果我们拨打CallSP,可能会超时。如果超时,我们在尝试Complete()事务时会收到错误。

交易已中止。 | System.Data.SqlClient.SqlException(0x80131904):COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION。

有什么方法可以构建这个,这样我们就可以保持在事务中运行CallSP的加速优势,而且如果CallSP以不再导致事务的方式失败,我们就不会尝试完成它打开完成?

1 个答案:

答案 0 :(得分:0)

不是在scope.Complete()子句中调用finally{},而是在try{}子句中调用它。

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, new System.TimeSpan( 0, 15, 0 ) ))
    {
      try
      {
        for (int i=0; i<10000; i++)
        {
          dataContext.CallSP( i );
        }
        scope.Complete();
      }
      catch (Exception e)
      {
        log( e );
      }
    }

如果您输入TransactionScope子句,catch{}将自动中止,因此在退出scope.Complete()子句之前不会调用using{}