Program,Life,Society.....

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

处理事务的方法很多,其中最常用的是.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 StringByVal 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 StringByVal cn As StringAs 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

posted on 2004-08-18 14:35  vuejs3  阅读(1420)  评论(2)    收藏  举报