该操作对交易状态无效

时间:2013-11-18 15:30:11

标签: c# transactions transactionscope

我有一个TransactionScope()块。它总是卡在插入语句中。它在活动监视器中显示为阻止任务,因此它阻止SQL服务器,并在超时后,我收到此错误:

  

该操作对交易状态无效。

出了什么问题?

const TransactionScopeOption opt = new TransactionScopeOption();
TimeSpan span = new TimeSpan(0, 0, 1, 30);

try
{
    using (TransactionScope scope01 = new TransactionScope(opt, span))
    {
        using (var sqlcon = new SqlConnection(sSqlCon))
        {
            //select,insert , update statements
        }
    }
}
catch (Exception ex)
{
}

2 个答案:

答案 0 :(得分:2)

这可能意味着它已经中止了。您是否在交易括号内调用交易完成?

try
{
    using (TransactionScope scope01 = new TransactionScope(opt, span))
    {
        using (var sqlcon = new SqlConnection(sSqlCon))
        {
            //select,insert , update statements
        }

        scope01.Complete();
    }
}

如果它没有调用Complete,它将自动回滚。

答案 1 :(得分:0)

事务可能已超时。检查 maching.config 以获取默认超时时间

<configuration> 
  <system.transactions>
    <machinesettings maxtimeout="00:30:00" />
  </system.transactions>
</configuration>