使用单个事务处理多个方法C#

时间:2016-06-08 13:45:19

标签: c# ms-access

假设我有一个Insert-button,我在其中有多个方法,在数据库中读取,插入和更新等。是否可以对所有这些被调用的方法使用单个事务?的像:

    private void method_A(){/* doing tons of db stuff */}
    private void method_B(){/*...*/}
    private void method_C(){/*...*/}

//etc

       protected void Insert_OnClick(object sender, EventArgs e)
       {
        //begin transaction

        Method_A();

        Method_B();

        Method_C();

        //end transaction


        }

这种方式可行吗?从未使用过交易。 顺便说一句,如果重要,请使用MS Access数据库。

2 个答案:

答案 0 :(得分:3)

不确定Access是否尊重交易,但您可以将呼叫包裹在TransactionScope中。这隐式地将范围内的所有数据库活动添加到事务中:

protected void Insert_OnClick(object sender, EventArgs e)
{
    using(TransactionScope tran = new TransactionScope())
    {
        Method_A();
        Method_B();
        Method_C();

        tran.Complete();
    }
}

答案 1 :(得分:2)

是的,您可以通过创建事务实例并将其传递到需要使用它的任何方法来使用单个事务。根据您提供的代码说明一些伪代码:一个链接:MSDN OleDbTransaction

protected void Insert_OnClick(object sender, EventArgs e)
   {
       //begin transaction
       var connection = HoweverYoureManagingConnections();
       using (var transaction = connection.BeginTransaction())//If using OleDb 
       {

       try
       {
           var command = new OldDbCommand();
           command.Transaction = transaction;
           //Use passed in command object to issue your queries/inserts/updates in each method.
           Method_A(command);

           Method_B(command);

           Method_C(command);

           transaction.Commit();
       }
       catch(Exception ex)
       {
           //if there was an exception rollback.
           transaction.Rollback();
       }
       }


    }