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;
         }
      }
    }
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/214588.html
Copyright © 2011-2022 走看看