我目前正在开发一个存储过程,它将对数据库表执行几次插入操作,我想测试它是否可以按照我喜欢的方式返回受影响的总行数。我在事务管理器内部用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();
}
是否足以简单地抛出某种异常或是否有更好的方法来触发回滚?
答案 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#代码中处理回滚