以下のコードでは例外がスローされます。
Imports System.Transactions
Imports System.Data.SqlClient
Public Class _Default
Inherits System.Web.UI.Page
Public Sub Test()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Using scope As New TransactionScope()
Test(1)
Test(2)
Test(3)
Test2(4)
End Using
Catch ex As Exception
End Try
End Sub
Public Sub Test(ByVal personID As Integer)
Try
Dim objCommand As New SqlCommand
Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=AcornTest;Integrated Security=True"
Dim objCon As New SqlConnection
objCon.ConnectionString = strConString
objCon.Open()
Using objCon
Using objCommand
objCommand.Connection = objCon
objCommand.CommandText = "UPDATE Person SET URN = @URN "
objCommand.Parameters.AddWithValue("@URN", personID)
objCommand.ExecuteNonQuery()
End Using
End Using
objCon.Close()
objCon = Nothing
Catch ex As Exception
'I don't swallow exceptions.
End Try
End Sub
Public Sub Test2(ByVal personID As Integer)
Try
Dim objCommand As New SqlCommand
Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=AdventureWorks2008R2;Integrated Security=True"
Dim objCon As New SqlConnection
objCon.ConnectionString = strConString
objCon.Open()
Using objCon
Using objCommand
objCommand.Connection = objCon
objCommand.CommandText = "UPDATE Person SET URN = @URN "
objCommand.Parameters.AddWithValue("@URN", personID)
objCommand.ExecuteNonQuery()
End Using
End Using
objCon.Close()
objCon = Nothing
Catch ex As Exception
'I don't swallow exceptions.
End Try
End Sub
End Class
TransactionScope を使用すると、分散トランザクションを作成できると思いました。例外は、「サーバー 'IANSCOMPUTER' の MSDTC は使用できません」です。Test2.objCon.Open の実行時。
Cserg のコメントの更新が役立ちました。SQLTransaction インスタンスを使用するエンタープライズ アプリケーションのバグを特定しようとしています。TransactionScope に移行しています。テスト システムのログ ファイルに次のエラーが表示されます。
The Transaction has already been implicitly or explicitly committed or aborted
私は今日これを見て 5 時間費やしましたが、解決策はありませんでした。誰でも問い合わせの行を提案できますか?