在批处理结束时检测到不可提交的事务。交易回滚

时间:2019-05-03 19:31:54

标签: c# sql sql-server tsql

我有一个存储过程,该存储过程是使用事务从C#代码中调用的。 当我在C#(其控制台应用程序)中运行代码时,不是从catch块中获取结果,而是抛出一个异常:

  

在批处理结束时检测到不可提交的事务。的   交易被回滚。

C#代码:

actorSystem
  .dispatchers
  .lookup("akka.actor.default-dispatcher")
  .configurator
  .config
  .getInt("fork-join-executor.parallelism-min")

存储过程:

actorSystem
  .dispatchers
  .lookup("akka.actor.default-dispatcher")
  .configurator
  .config
  .getDouble("fork-join-executor.parallelism-factor")

当存储过程引发错误时,我没有返回到catch块,而是返回了一个异常,说“批处理结束时检测到不可提交的事务。该事务将回滚。”

但是,如果我在SSMS中运行存储过程,它将按预期工作: enter image description here

为什么我从C#代码中调用时结果为何不同?

1 个答案:

答案 0 :(得分:1)

这是因为您已将“ xact_abort设置为开”。.根据documentation,xact_abort用于 指定当Transact-SQL语句引发运行时错误时,SQL Server是否自动回滚当前事务。

此外,您还需要在throw中将“状态”值设置为-1,以使事务不可使用。