VB.NET 中操作数据库应用事务,SqlTransaction

Private   Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
'在此处放置初始化页的用户代码
        Dim SqlHelper As New SqlHelper
        ExecuteSqlTransaction(SqlHelper.sConnectString)
    
End Sub


    
Private   Sub ExecuteSqlTransaction(ByVal connectionString As String)
        
Dim connection As New Data.SqlClient.SqlConnection(connectionString)
        connection.Open()

        
Dim command As Data.SqlClient.SqlCommand = connection.CreateCommand()
        
Dim transaction As Data.SqlClient.SqlTransaction

        
' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        
' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        
command.Transaction = transaction

        
Try
            
'事务处理,第一次向数据库插入一条数据,接着第二次向数据库中插入相同一条数据,由于数据库关键字段有限制不能重复,第一次动用无效。
            '事务处理是由以一个单一的逻辑单位完成的一系列操作,它可以由一系列的SQL语句、SELECT、INSERT、UPDATE、DELETE组成,如果在该单位包
            '含的操作执行完毕后没有发生错误,那么它对数据库所作的改变就是永久的了。如果一旦有错误发生,它就不会对数据库作任何修改或改变。


            
'我们多数会将交易写在STORED PROCEDURE中,但是如果出现DATAGRID中的多数据更新,就需要用到.NET中的这个System.Data.SqlClient.SqlTransaction
            '来处理异常!()

            
command.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            
command.ExecuteNonQuery()

            
command.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"

            
command.ExecuteNonQuery()

            
' Attempt to commit the transaction.
            transaction.Commit()
            Response.Write(
"Both records are written to database.")

        
Catch ex As Exception
            Response.Write(
"Commit Exception Type: {0}" + ex.GetType().ToString() + "<br>")
            Response.Write(
"  Message: {0}" + ex.Message)

            
' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            
Catch ex2 As Exception
                
' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Response.Write("Rollback Exception Type: {0}" + ex2.GetType().ToString() + "<br>")
                Response.Write(
"  Message: {0}" + ex2.Message)
            
End Try
        
Finally
            connection.Close()
        
End Try


    
End Sub


    
Private   Function a()

        
Dim connectionString As String = "server=localhost;database=web;uid=sa;pwd="
        
Dim conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
        
Dim cmd() As System.Data.SqlClient.SqlCommand

        
Dim trans As System.Data.SqlClient.SqlTransaction
        
Dim i As Integer, k As Integer
        
Dim SQL() As String

        k 
= 2
        SQL(
0= "update ..."
        SQL(
1= "update ..."
        SQL(
2= "update ..."


        trans 
= conn.BeginTransaction()
        
For i = 0 To k
            cmd(i) 
= New System.Data.SqlClient.SqlCommand(SQL(i), conn)
            cmd(i).Transaction 
= trans    '设置事务
        Next
        
Try
            
For i = 0 To k
                cmd(i).ExecuteNonQuery()
            
Next
            trans.Commit()   
'完成事务结束确定
        Catch Ex As Exception
            trans.Rollback()  
'错误时,事务滚回
        Finally
            conn.Close()
        
End Try
    
End Function


    
Private   Function b()
        
Dim connectionString As String = "server=localhost;database=web;uid=sa;pwd="
        
Dim sqlConn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)


        sqlConn.Open()

        
'' Start Transaction
        Dim myTrans As System.Data.SqlClient.SqlTransaction = sqlConn.BeginTransaction()

        
Dim sqlda As New System.Data.SqlClient.SqlDataAdapter

        sqlda.SelectCommand 
= New System.Data.SqlClient.SqlCommand("SELECT_INS_MAXID", sqlConn, myTrans)
        sqlda.InsertCommand 
= New System.Data.SqlClient.SqlCommand("INSERT_PRODUCT", sqlConn, myTrans)

        
Try

            
'' Get New ID
            Dim NewID As Int32 = Convert.ToInt32(sqlda.SelectCommand.ExecuteScalar())
            
Dim setID = NewID
            
Dim setRootId = NewID
            
'私有方法设置SQL语句中的@变量值

            
'SetProductSqlCmdParameters(sqlda.InsertCommand, boProduct)

            sqlda.InsertCommand.ExecuteNonQuery()

            
' Insert Product Expand
            sqlda.InsertCommand.CommandText = "INSERT_PRODUCT_EXPAND"

            
' 私有方法设置SQL语句中的@变量值
            ' SetProductExpandSqlCmdParameters(sqlda.InsertCommand, boProduct)
            sqlda.InsertCommand.ExecuteNonQuery()

            myTrans.Commit()

        
Catch e As Exception

            
Try

                myTrans.Rollback()

            
Catch ex As Exception


            
End Try

        
Finally
            sqlConn.Close()

        
End Try

    
End Function

 

你可能感兴趣的:(sql,exception,数据库,command,Integer,VB.NET)