在transactioncope C#中触发回滚

时间:2018-03-06 08:37:33

标签: c# .net sql-server rollback transactionscope

我目前正在开发一个存储过程,它将对数据库表执行几次插入操作,我想测试它是否可以按照我喜欢的方式返回受影响的总行数。我在事务管理器内部用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();
}

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

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