zoukankan      html  css  js  c++  java
  • 实现事务的几种方法

    (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;
         }
      }
    }
  • 相关阅读:
    怎么打jar包 jar怎么运行
    ORACLE directory 目录
    materialized view 和snapshot
    OS级别kill 进程
    ORA01843 not a valid month
    物化视图 Materialized View
    oracle数据字典
    在oracle中如何退出edit模式
    Oracle临时表
    Oracle 查看 对象 持有 锁 的情况 (添加了V$SQL视图,这样可以一起查出具体导致这种锁的SQL语句,一次性就搞定了)
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/214588.html
Copyright © 2011-2022 走看看