不是SQL中前提:
方法1 往Table1中插入数据;
方法2: 更新Table2的数据;
方法3: 删Table3的数据;要求:方法A中开启事务,调用方法1和方法2或方法3(随意组合),如果都成功,则Commit,失改rollback;
请问如实现,请给实例!

解决方案 »

  1.   

    System.Transactions.TransactionScope类,隐式事务代码块...例...
    using(TransactionScope scope = new TransactionScope())
    {
    //方法1 往Table1中插入数据; 
    //方法2: 更新Table2的数据; 
    //方法3: 删Table3的数据;
    scope.Complete();
    }
    需要MSDTC支持...
      

  2.   

    最简单的方法,定义各个方法,并设置一个事务作为参数传递,比如:public void AMethod(参数)
    {
       
       其他代码
       SqlTransaction tran=创建一个transaction对象;
       try
       {
       //A中需要执行的代码;如:往Table1中插入数据;
       BMethod(B需要的参数,tran);
       CMethod(B需要的参数,tran);
       }
       catch(Exception ex)
       {
         tran.Rollback();
       }
       finally
       {
          //其他代码;
       }
     
    }public void BMethod(B需要的参数,ITransaction transaction)
    {
       //使用传递过来的transaction对象,更新Table2的数据;
    }
    public void CMethod(C需要的参数,ITransaction transaction)
    {
       ////使用传递过来的transaction对象,删Table3的数据; 
    }又或者,把事务定义成某个类的一个对象。等等。都可以。关键是只要在一是同一个事务就可以了。
      

  3.   

    我想的方法如下:
    odbcConnection.Open();
    odbcTransaction = odbcConnection.BeginTransaction();
    InsertTable1(odbcConnection, odbcTransaction)
    {
     OdbcCommand command = new OdbcCommand(sql);
     command.Connection = odbcConnection;
     command.Transaction = odbcTransaction;
     command.ExecuteNonQuery();
    }
    UpdateTable2(odbcConnection, odbcTransaction);一样
    DeleteTable3(odbcConnection, odbcTransaction);一样
      

  4.   

    using (TransactionScope ts= new TransactionScope(TransactionScopeOption.Required))
                {
                    Test1();
                    Test2();
                    ts.Complete();
                }