.NET Framework 进行事务处理

ZDNet软件频道 时间:2003-12-11 作者:ZDNet China |  我要评论(9)
本文关键词:.net web开发
.NET的诞生,彻底改变了原先的ADO Recordset 死板。让我们来享受.NET Framework为我们带来的方便开发环境吧!
本文译自Builder.com,未经许可请勿转载

在使用了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+事务服务而不需要亲自动手来做。

 



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134