回滚在C# [英] Roll back in c#

查看:91
本文介绍了回滚在C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2表查询和细节。 在保存按钮,单击我已经写了

I have 2 tables enquiry and details. On save button click I have written

fbsave();
fbsavedetails();

fbsave()保存查询表中的数据和 fbsavedetails()保存数据的详细信息表。

fbsave() save the data in enquiry table and fbsavedetails() saves data in details table.

现在如果在fbsavedetails出现错误(),那么这两个步骤应该回滚。

这可能吗?

推荐答案

您可以显式地创建一个事务,并通过周围,即

You can explicitly create a transaction and pass that around, i.e.

using(var connection = ...)
{
    connection.Open();
    using (var tran = connection.BeginTransaction())
    {
        try
        {
            FBSave(connection, tran);
            FBSaveDetails(connection, tran);
            tran.Commit();
        }
        catch
        {
            tran.Rollback();
            throw;
        }
    }
}

请注意,在这里您必须还可以设置交易每个命令的,因此为什么你需要在通过它,所有的命令都必须相同的连接对象。

Note that here you must also set the Transaction on each command, hence why you need to pass it in, and all the commands must be on the same connection object.

或者:您可以使用的TransactionScope ;重要的是,在打开()情况的的的的TransactionScope 来获得自动入伍:

Or: you can use TransactionScope; it is important that the Open() happens inside the TransactionScope to get automatic enlistment:

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 的办法,你不需要设置什么特别的东西 - 大部分是自动的。可以当然任选通过连接入的方法中,但他们也能获得它们自己的连接,并且在大多数情况下,将工作细

with the TransactionScope approach, you don't need to set anything special - most of it is automatic. You can of course optionally pass the connection into the methods, but they could also obtain their own connection, and in most cases it would work fine.

这篇关于回滚在C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆