实现事务的几种方法

(1)直接写入sql中:在存贮过程中使用Begin Trans,Commit Trans
RollBack Trans实现
     优势:1所有的事务逻辑包含在一个单独的调用中
           2拥有运行一个事务的最佳性能
           3独立于应用程序
     限制:1事务上下文只保存在数据库调用中
           2数据库代码与数据库系统有关,不便移植
(2)使用ADO.net实现:使用ADO.NET 实现,使用这种方式的优点是
可以在中间层来管理事务,当然你也可以选择在数据层来实现。
SqlConnection 和OleDbConnection对象有一个BeginTransaction方法,
它可以返回 SqlTransaction 或者OleDbTransaction 对象。而且这个
对象有 Commit 和 Rollback 方法来管理事务
     优点 1简单性
          2和数据据事务差不多的快
          3独立于数据库,不同数据库的专有代码被隐藏了
     缺点 1事务不能跨越多个数据库连接
          2事务执行在数据库连接层上,所以需要在事务过程中维护
一个数据库连接
(3)COM+事务(分布式事务):要参与COM+事务,.NET 类必须是从
System.EnterpriseServices.ServicedComponent 类继承的,这可使得
该 .NET 类能够在 COM+ 内运行,通过使用System.EnterpriseServices.ContextUtil 类,
可以获得有关 COM+ 对象上下文的信息。它提供SetComplete 和 SetAbort 方法,
以便分别显式提交和回滚事务。正如您预想的那样,当所有操作已成功
执行后,紧随 try 程序块的最后调用 ContextUtil.SetComplete 方法
来提交事务。所引发的任何异常将在 catch 程序块中被捕获,该程序块
使用ContextUtil.SetAbort 中止事务。
例如:
Transaction(TransactionOption.Required)] //说明所有方法都是支持事务,实际应用中不必要只需在要添加事务的
                                         //的方法前添加此属性即可
  public class Class1 : ServicedComponent {
   [AutoComplete] //自动、非自动
   public void Example1()
  {
   …
   }
  }
 完整的例子:
using system.EnterpriseServices;
using System.Sqlclient;
public class trans:System.EnterpriseServices.ServicedComponent
{
  [Transaction(TransactionOption.Required)]
  public string tansfermoneryFromBToA(double m)
  {
   try
     {
         ContextUtil.EnableCommit();
         //执行sqla,可以是一个连接到sql上的数据库操作函数等
         //执行sqlb,可以是以给连接到orcal上的数据库操作函数等
         ContextUtil.SetComplete();
         return "Transfer Succeed";
     }
     catch(Exception ex)
     {
        ContextUtil.setAbort();
        return "TransFer failed ---" + ex.Message;
     }
  }
}
原文地址:https://www.cnblogs.com/kuailewangzi1212/p/214588.html