快速业务通道

ASP.NET 2.0数据教程之六十三:在事务里对数据库修改进行封装

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
;
    private SqlTransaction Transaction
     {
      get
      {
         return this._transaction;
      }
      set
      {
        this._transaction = value;
       }
    }

    public void BeginTransaction()
    {
      // Open the connection, if needed
      if (this.Connection.State != ConnectionState.Open)
        this.Connection.Open();

      // Create the transaction and assign it to the Transaction property
      this.Transaction = this.Connection.BeginTransaction();

      // Attach the transaction to the Adapters
      foreach (SqlCommand command in this.CommandCollection)
      {
         command.Transaction = this.Transaction;
      }

      this.Adapter.InsertCommand.Transaction = this.Transaction;
       this.Adapter.UpdateCommand.Transaction = this.Transaction;
       this.Adapter.DeleteCommand.Transaction = this.Transaction;
    }

    public void CommitTransaction()
     {
      // Commit the transaction
       this.Transaction.Commit();

      // Close the connection
      this.Connection.Close();
    }

    public void RollbackTransaction()
    {
      // Rollback the transaction
       this.Transaction.Rollback();

      // Close the connection
      this.Connection.Close();
    }
  }
}

类声明里的关键字partial向编译器表明代码里添 加的成员(members)是添加到命名空间NorthwindTableAdapters里的 ProductsTableAdapter class类.我们注意到在文件的顶部有一个using System.Data.SqlClient声明,这是因为TableAdapter被设置为使用SqlClient provider,在其内部使用一个SqlDataAdapter object对象来向数据库发出命令. 因此,我们需要使用SqlTransaction class类来启动事务,然后提交或回滚事务. 如果没有使用Microsoft SQL Server数据库的话,你需要调用恰当的 provider.

这些方法被标记为public,我们可以在ProductsTableAdapter 里,或数据访问层DAL的其它类,甚至是其它层比如业务逻辑层BLL来调用这些 法.

BeginTransaction()方法打开了TableAdapter的内部的 SqlConnection(如果需要的话), 开启事务并赋值给Transaction属性,并将事务 分配(attache)给SqlDataAdapter的SqlCommand objects对 象.CommitTransaction()和 RollbackTransaction()方法在关闭内部的 Connection object对象前分别调用Transaction object对象的Commit 和 Rollback方法.

添加上述代码后,我们将在ProductsDataTable 或业务逻 辑层BLL里添加方法以执行一系列的置于事务之下的命令. 下面的代码在Batch Update pattern模式里使用一个事务来更新一个ProductsDataTable instance实 例.它调用BeginTransaction method方法来启动一个事务,然后用一个 try...catch模块来发布数据更改命令.如果调用Adapter object对象的Update方 法出现异常,那么将转到catch区域,对事务进行回滚.记得执行Batch Update pattern模式的Update方法将遍历ProductsDataTable里的所有行(rows),执行相 应的InsertCommand, UpdateCommand, 和DeleteCommands命令.如果这些命令中的 其中一个出现异常,事务将回滚,撤销在事务里的所做的更改.如果Update命令全 部执行无异常,那么提交事务.

public in

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号