事务处理器内的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通过超时结束事务的主要内容,如果未能解决你的问题,请参考以下文章
关于调用方有事务,被调用的SP中也有事务,在嵌套SP中回滚代码的报错处理,好文推荐