我有一个存储过程,该存储过程是使用事务从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块,而是返回了一个异常,说“批处理结束时检测到不可提交的事务。该事务将回滚。”
为什么我从C#代码中调用时结果为何不同?
答案 0 :(得分:1)
这是因为您已将“ xact_abort设置为开”。.根据documentation,xact_abort用于 指定当Transact-SQL语句引发运行时错误时,SQL Server是否自动回滚当前事务。
此外,您还需要在throw中将“状态”值设置为-1,以使事务不可使用。