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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务处理器内的C#,SQL SP通过超时结束事务相关的知识,希望对你有一定的参考价值。

随着代码:

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

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

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

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

答案

而不是在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{}

以上是关于事务处理器内的C#,SQL SP通过超时结束事务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中针对事务表计算一段时间内的覆盖日期?

关于调用方有事务,被调用的SP中也有事务,在嵌套SP中回滚代码的报错处理,好文推荐

SQL 错误“在批处理结束时检测到不可提交的事务”,数据库上没有事务

sql语句代编写sql 游标 事务代写

SQL Server,C#:事务回滚超时异常

10. SQL—事务处理控制