0

以下のコードでは例外がスローされます。

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 時間費やしましたが、解決策はありませんでした。誰でも問い合わせの行を提案できますか?

4

1 に答える 1