在 transactionscope C# 中触发回滚

Triggering a rollback inside transactionscope C#

我目前正在开发一个存储过程,它将向数据库执行几次插入 table 我想测试一下它是否可以 return 中受影响的总行数我想要的方式。我正在从事务范围内的 C# .NET 代码调用此存储过程。

但是我的问题是,在执行存储过程并且受影响的行显示在控制台上后,如何触发回滚?

我不允许分享我的代码,但我可以给出它的伪代码,因为它很简单:

using(TransactionScope scope){
  //Run the procedure and save the return value in a variable
  int rowsAffected = MyStoredProcedure();

  //Print the value in the variable
  Console.WriteLine(rowsAffected);

  //Ideally, I want to perform the rollback here.
  scope.Complete();
}

简单地抛出某种异常就足够了吗?还是有更好的方法来触发回滚?

只要您不调用 'Complete',它就不会提交。删除它,当您离开范围的使用时它将回滚:

using(TransactionScope scope)
{
  //Run the procedure and save the return value in a variable
  int rowsAffected = MyStoredProcedure();

  //Print the value in the variable
  Console.WriteLine(rowsAffected);

  //Don't call Complete() and it will be rollbacked
  //scope.Complete();
}

因为您使用的是存储过程。为什么不将事务保存在存储过程本身中。那么您无需担心在 C# 代码中处理回滚