【发布时间】:2018-08-14 01:18:42
【问题描述】:
我目前正在开发一个存储过程,该过程将对数据库表执行几次插入操作,我想测试一下它是否可以以我希望的方式返回受影响的总行数。我正在事务范围内从我的 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块结束之前回滚 - 只需调用scope.Dispose()。 -
另外,请注意默认的
TransactionScope隔离级别是可序列化的,这很容易出现死锁。除非您特别需要可序列化,否则请考虑指定TransactionOptions.IsolationLevel.ReadCommitted。 -
@DanGuzman 是的,我知道并已实施。我在想,如果我保持代码简单易读,会更容易。
标签: c# .net sql-server rollback transactionscope