我需要创建一个简单的dotnet应用程序,它将在循环内调用存储过程(存储过程接受几个参数并将它们添加到表中).要求是所有行都插入或非插入.
为了确保这一点,我使用过:
using (TransactionScope scope = new TransactionScope()) { foreach (EditedRule editedRules in request.EditedRules) { ...stored procedure call } }
我之前从未使用过TransactionScope,有人可以告诉我这段代码是否有效,并且我的所有行都会被回滚.
如果有更好的方法,我也将不胜感激.
假设您的存储过程不创建并提交自己的事务,此代码将起作用,只需进行一处更改:您的代码需要在using块结束之前编码 scope.Complete() ;否则,交易将回滚.using (TransactionScope scope = new TransactionScope()) { foreach (EditedRule editedRules in request.EditedRules) { ...stored procedure call } scope.Complete(); // <<== Add this line }
这个结构背后的想法是,只有当块正常退出时才会发生Complete调用,即处理循环时没有异常.如果抛出异常,作用域将检测到它,并导致事务回滚.
查看更多关于c# – 使用TransactionScope()进行事务管理的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did69310