0
是否有可能做這樣的事情:的TransactionScope混亂
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Transactions
Public Class Form1
Private _ConString As String
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim objDR As SqlDataReader
Dim objCommand As SqlCommand, objCommand2 As SqlCommand
Dim objCon As SqlConnection
Dim objCon2 As SqlConnection
Dim id As Integer
Try
_ConString = "Data Source=IANSCOMPUTER;Initial Catalog=AdventureWorks2008R2;Integrated Security=True;MultipleActiveResultSets=true"
objCon = New SqlConnection(_ConString)
objCommand = New SqlCommand("SELECT * FROM PERSON.PERSON WHERE BusinessEntityID<=10")
objCommand2 = New SqlCommand()
objCommand.Connection = objCon
objCommand2.Connection = objCon
objCon.Open()
objDR = objCommand.ExecuteReader(ConnectionState.Closed)
Do While objDR.Read
Using scope As New TransactionScope
objCon2 = New SqlConnection(_ConString)
objCon2.Open()
Using objCon2
objCommand2.CommandText = "UPDATE Person.Person SET middlename = @middlename WHERE " & _
" Person.BusinessEntityID = @ID "
objCommand2.Parameters.AddWithValue("@middlename", objDR("BusinessEntityID") + 1)
objCommand2.Parameters.AddWithValue("@ID", objDR("BusinessEntityID"))
objCommand2.ExecuteNonQuery()
objCommand2.Parameters.Clear()
End Using
End Using
Loop
objDR.Close() 'line 16
Catch ex As Exception
Throw
Finally
End Try
End Sub
End Class
在上面的代碼,爲每個循環創建事務。我想這樣做的原因是因爲表被鎖定,直到while循環結束。上述代碼的問題是忽略了事務的創建。
你不提交事務,使用(''scope.Complete()'](http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx)(就在TransactionScope的'End Using'之前) 。 – Styxxy