在transactioncope C#中触发回滚

问题描述 投票:1回答:2

我目前正在处理一个存储过程,它将对数据库表执行几次插入,我想测试它是否可以按照我喜欢的方式返回受影响的总行数。我在Transactioncope中从我的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();
}

是否足以简单地抛出某种异常或是否有更好的方法来触发回滚?

c# .net sql-server rollback transactionscope
2个回答
2
投票

只要你不称之为“完成”,它就不会被提交。删除它,当你离开使用范围时它将被回滚:

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();
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.