5

每当我通过 Web API 访问具有内存表的存储过程时,都会TransactionScope收到此错误:

当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。在批处理结束时检测到不可提交的事务。事务回滚

我曾尝试直接在 SQL Server Management Studio 中执行相同的存储过程,并且运行良好。

此外,当我TransactionScope从 Web API 中删除时,它也可以正常工作。但我想TransactionScope在 Web API中使用

在存储过程中,我有以下内容:

SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
BEGIN TRY
 SELECT ITEMID FROM SAMPLE_IN_MEMORY_TABLE
           ----
END TRY
BEGIN CATCH
--
END CATCH

在 Web API 内部按照我正在使用存储过程的方式

QueriesTableAdapter qa = new QueriesTableAdapter();

using (TransactionScope scope = new TransactionScope())
{
      qa.SpSampleInMemoeryAccess(g_OutParameter64);

      if (g_OutParameter64 > 0)
      {
          scope.Complete();
          Status = true;             
      }
      else
      {
          Status = false;
      }
   }
}
4

1 回答 1

0

您正在事务中间更改隔离级别。

TransactionScope 的默认隔离级别是SERIALIZABLE,但是在您的存储过程中,您将其更改为 READ UNCOMMITTED (!!!希望您知道自己在做什么)。

任何一个:

  1. 不要在存储过程中设置隔离级别
  2. 在 TransactionScope 构造函数中指定隔离级别 READ UNCOMMITTED。
于 2019-05-13T09:33:17.920 回答