我目前正在处理一个存储过程,它将对数据库表执行几次插入,我想测试它是否可以按照我喜欢的方式返回受影响的总行数。我在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();
}
是否足以简单地抛出某种异常或是否有更好的方法来触发回滚?
只要你不称之为“完成”,它就不会被提交。删除它,当你离开使用范围时它将被回滚:
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#代码中处理回滚