使用.NET Framework 进行事务处理

使用.NET Framework 进行事务处理
作者: ZDNET   www.ASPCool.com 时间:2002-5-21 17:44:09  阅读次数:4636

     在使用了ADO.NET 一段时间以后,你会发现新的DataSet与ADO Recordset之间灵活性的区别了。在层与层之间移动表单和它们的关系的能力,以及将它们绑定到可视化对象的能力,并能够使用一套标准的类来处理它们确实是.NET Framework独有的。但是大多数的商务应用程序最终都需要在后端的数据库中插入,更新或者删除数据。当这些操作发生时,你需要有一种方法来保证数据的集成度。这就是事务出现的原因。
  
  
  
  大多数的开发者明白事务处理和一个事务过程ACID属性的基本概念。从根本上来说,你需要确保数据库的所有修改操作都应该在一个特定的事务过程中完成;否则,它们就会发生问题。下面有两种基本的在.NET中管理数据库事务过程的方法:要么是通过一个ADO.NET Connection对象或者是通过一个COM+对象。
  
  使用ADO.NET Connection 对象
  
  
  
  System.Data.SQLClient 和System.Data.OleDBClient 命名空间的Connection对象都支持事务语义。例如,你可以象下面这样管理一个数据库连接的事务上下文:
  
  
  Dim myConnection As New SqlConnection(myConnString)
  myConnection.Open()
  Dim myCommand As New SqlCommand()
  Dim myTrans As SqlTransaction
  ' Create the transaction context
  myTrans = myConnection.BeginTransaction()
  ' Assign both transaction object and connection
  ' to Command object for the transaction
  myCommand.Connection = myConnection
  myCommand.Transaction = myTrans
  
  
  
  在执行了任何数据库修改代码以后,你可以使用myTrans.Commit()提交这个事务过程或者使用myTrans.RollBack()命令回滚这些改变。
  
  
  
  使用Connection 对象的Transaction上下文有一个严重的限制,就是它只被限制只能用于单一的数据库(也就是你打开连接的那个数据库)。当然,你不需要从你自己的程序中完成数据库操作过程,你可以使用特定数据库的存储过程,这个过程里包含事务代码。虽然这能够减少你的处理时间,但是你还是会被限制只能在一个数据库中执行事务过程。 控制多个数据库上的事务过程
  
  为了控制多个数据库上的事务过程,你将不得不使用COM+提供的事务机制。
  
  
  
  System.EnterpriseServieces对象提供了通过.NET内一个统一的命名空间操作COM+服务的方法。命名空间的一部分包括管理事务的能力。为了创建这种类型的事务,你必须首先创建一个对象,这个对象从System.EnterpriseServices 命名空间继承ServicedComponent 对象的功能。你的这个新的对象然后就能够创建和管理它自己的事务上下文并利用任何拥有事务资源管理器的资源。因此,你不仅可以管理发生在两个SQL Server 数据库之间的事务而且还可以是SQL Server和一个Oracle 数据库之间的事务过程。下面的代码片段演示了两个数据库之间的简单事务过程。
  
  
  Imports System.Data.SqlClient
  Imports System.EnterpriseServices
  '对公共类TrxComponent使用Transaction 属性
  <Transaction(TransactionOption.Required)> _
  Public Class TrxComponent
  
  'TrxComponent 必须从基类ServicedComponent 继承
  Inherits ServicedComponent
  
  <AutoComplete()> Function AddData(ID as String) as String
  
  '这里的代码把数据插入到第一个数据库
  
  '这里的代码把数据插入到第二个数据库
  End Function
  
  End Class
  
  
  
  TrxComponent 通过继承ServicedComponent 组件的功能来使用COM+ 事务服务。设定了AddData 函数的AutoComplete属性以后,数据库自动的在函数结束的时候进行提交。如果底层的数据库放弃了自己那一部分的事务处理过程的话,整个事务处理过程也会被放弃。你还可以手动的通过除去AutoComplete属性并调用ContextUtil 对象的SetComplete或者SetAbort方法来控制事务的状态。
  
  
  
  结论
  
  
  
  数据库事务管理是开发者的一个重要工具,它能够维护一个底层数据库的一致性。.NET 对于管理单一数据库的事务过程有它自己的机制,而且在EnterpriseServices 命名空间里还有一套捆绑类能够帮助开发者使用COM+事务服务而不需要亲自动手来做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值