加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用TransactionScope()进行事务管理

发布时间:2020-12-15 23:26:45 所属栏目:百科 来源:网络整理
导读:我需要创建一个简单的dotnet应用程序,它将在循环内调用存储过程(存储过程接受几个参数并将它们添加到表中).要求是所有行都插入或非插入. 为了确保这一点,我使用过: using (TransactionScope scope = new TransactionScope()){ foreach (EditedRule editedRu
我需要创建一个简单的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调用,即处理循环时没有异常.如果抛出异常,作用域将检测到它,并导致事务回滚.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读