处理事务的方法很多,其中最常用的是.NET和sql server的事务处理,^_^,COM+俺不懂,听说用于事务处理很强,可惜了
(有机会 定要研究研究)。
下面的说明是SQL server:
通常的Tranaction的使用是基于一个sqlconnection的,使用BeginTransaction来开始和用Commit提交,rollback来回滚。我要说的多个连接的实质还是这样,只是自己使用了一个小伎俩,利用.net的捕捉异常的机制,不再一一提交,而是统一提交和回滚。
下面是处理多个Transaction的一个类。ProcessTransaction.vb
处理多个连接时只要把相应的ConnectionString和相应的Sql语句传入就搞定了。注意的时,ConnectionString存放在一个collection(cCN)中,Sql语句放在一个类型时string的数组中commandText(),注意把在一个Transaction的sql语句统一放在里面啊!
Code:
Imports System.Data
Imports System.Data.SqlClient
Public Class ProcessTransaction

Private c As New Collection
Public Sub ptExecuteNonQuery(ByVal commandText() As String, ByVal cCN As Collection)
Dim s As String
Dim flag As Boolean
For Each s In cCN
If Not ptExecuteNonQuery_test(commandText, s) Then
flag = False
Exit For
Else
flag = True
End If
Next
Dim sqlTa As SqlTransaction
If flag Then
For Each sqlTa In c
sqlTa.Commit()
Next
Else
For Each sqlTa In c
sqlTa.Rollback()
Next
End If
End Sub

Private Function ptExecuteNonQuery_test(ByVal commandText() As String, ByVal cn As String) As Boolean
Dim sqlcn As New SqlConnection(cn)
Dim sqlCmd As New SqlCommand
Try
sqlcn.Open()
Dim sqlTa As SqlTransaction = sqlcn.BeginTransaction()
c.Add(sqlTa)
sqlCmd.CommandType = CommandType.Text
sqlCmd.Connection = sqlcn
sqlCmd.Transaction = sqlTa
Dim CommStr As String
For Each CommStr In commandText
sqlCmd.CommandText = CommStr
sqlCmd.ExecuteNonQuery()
Next
Return True
Catch ex As Exception
Return False
Finally
sqlCmd.Dispose()
sqlcn.Close()
sqlcn.Dispose()
End Try
End Function
End Class


浙公网安备 33010602011771号