使用.NET Framework 进行事务处理
发表于:2007-06-30来源:作者:点击数:
标签:
在使用了ADO.NET 一段时间以后,你会发现新的DataSet与ADO Recordset之间灵活性的区别了。在层与层之间移动表单和它们的关系的能力,以及将它们绑定到可视化对象的能力,并能够使用一套标准的类来处理它们确实是.NET Framework独有的。但是大多数的商务应用
在使用了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 属性
_
Public Class TrxComponent
@#TrxComponent 必须从基类ServicedComponent 继承
Inherits ServicedComponent
原文转自:http://www.ltesting.net