C#中的TransactionScope能否触发SQL server中存储过程的回滚

本文关键字:server 存储过程 SQL TransactionScope 中的 | 更新日期: 2023-09-27 18:19:55

我有一个问题-是否可以在C#端使用using(块和TransactionScope)创建逻辑,在sql server上执行多个非查询,并在一个失败时回滚所有存储过程?

限制:我无法制作更大的存储过程来执行TSQL事务中的其他存储过程。

-存储过程中没有"提交",只有一个返回0;最后。

这是否意味着,如果事务失败/超时/I未命中事务,它们可以自动回滚。完成()?我是否需要将ROLLBACK插入到存储过程中以实现此功能?

我一直在努力寻找,但我找不到这个有点独特的问题的确切答案。谢谢你抽出时间。如果有人有任何可能的测试让我尝试,我会非常愿意。

C#中的TransactionScope能否触发SQL server中存储过程的回滚

是的,TransactionScope由ADO.NET获取。如果捕获任何异常并调用.Rollback(),则所有内容都将回滚。

它的工作方式有很多细节(例如MSDTC可以参与其中),但你的建议是完全有效的,也是实现你想要实现的目标的正确方式。

同样的情况也适用于Oracle和其他支持TransactionScope的数据库。您还可以通过WCF服务传递事务,如果使用了更多的DB,它们将成为事务的一部分,依此类推

通过一些低级别的工作,您甚至可以在事务中包含NTFS操作。Windows API支持NTFS,但不支持没有包装的.NET。