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

在c#中回滚

发布时间:2020-12-15 04:08:53 所属栏目:百科 来源:网络整理
导读:我有2个表查询和细节. 在保存按钮上单击我已经写 fbsave();fbsavedetails(); fbsave()将数据保存在查询表中,fbsaveetails()将数据保存在详细信息表中. 现在如果在fbsavedetails()中发生错误,则两个步骤都应该回滚. 可能吗? 解决方法 您可以显式地创建一个交
我有2个表查询和细节.
在保存按钮上单击我已经写
fbsave();
fbsavedetails();

fbsave()将数据保存在查询表中,fbsaveetails()将数据保存在详细信息表中.

现在如果在fbsavedetails()中发生错误,则两个步骤都应该回滚.

可能吗?

解决方法

您可以显式地创建一个交易并将其传递,即
using(var connection = ...)
{
    connection.Open();
    using (var tran = connection.BeginTransaction())
    {
        try
        {
            FBSave(connection,tran);
            FBSaveDetails(connection,tran);
            tran.Commit();
        }
        catch
        {
            tran.Rollback();
            throw;
        }
    }
}

请注意,在这里,您还必须在每个命令上设置事务,因此为什么需要传递它,所有命令必须在同一个连接对象上.

或者:您可以使用TransactionScope;重要的是,Open()发生在TransactionScope内以获得自动登记:

using(var tran = new TransactionScope())
{
    FBSave();
    FBSaveDetails();
    tran.Complete();
}

要么:

using(var tran = new TransactionScope())
using(var connection = ...)
{
    connection.Open();
    FBSave(connection);
    FBSaveDetails(connection);
    tran.Complete();
}

与TransactionScope方法,您不需要设置任何特殊的 – 大部分是自动的.您当然可以将连接传递到方法中,但也可以获取自己的连接,并且在大多数情况下它可以正常工作.

(编辑:李大同)

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

    推荐文章
      热点阅读