0

これを正しく行っているかどうかはわかりません。2つの接続を開いているからですか?エラーに関係なく、それらを閉じています。内部トランザクション スコープをいくつか入れて、2 つ目のトランザクション スコープを に設定してみましたRequiresNew。2 つの方法は互いに独立していますが、一方が失敗した場合は両方ともロールバックする必要があります。接続を作成して閉じる方法を変更する必要があるかもしれません。何かご意見は?ここに私がやっていることのいくつかのサンプルコードがあります:

Public Sub TransMethod()
    Using sTran As New Transactions.TransactionScope
        factory1.UpdateMethod(someObject1)
        facotry2.insert(someobject2)
        sTran.Complete()
    End Using
End Sub

Public Class factory1
    Public Shared Sub UpdateMethod(obj)
        dim someSQLParams....
        DataAcces.ExecuteNonQuery(command,someSQLParams)
    End Sub
End Class

Public Class factory2
    Public Shared Sub Insert(obj)
        dim someSQLParams....
        DataAcces.ExecuteNonQuery(command,someSQLParams)
    End Sub
End Class

Public Function ExecuteNonQuery(ByVal spname As String, _
        ByVal ParamArray parameterValues() As Object) As Object
    Dim connection As SqlConnection = Nothing            
    Dim command As SqlCommand = Nothing
    Dim res As Object = Nothing
    Try
        connection = New SqlConnection(_connectionString)
        command = New SqlCommand(spname, connection)
        command.CommandType = CommandType.StoredProcedure
        command.Parameters.AddRange(parameterValues)
        connection.Open()
        command.ExecuteNonQuery()
        res = command.Parameters(command.Parameters.Count - 1).Value
    Catch ex As Exception
        CreateDataEntry(ex, WriteType.ToFile, spname)
        If Not (transaction Is Nothing) Then
            transaction.Rollback()
        End If
    Finally
        If Not (connection Is Nothing) AndAlso _
            (connection.State = ConnectionState.Open) Then _
                connection.Close()
        If Not (command Is Nothing) Then command.Dispose()
    End Try
    Return res
End Function
4

1 に答える 1

1

TransactionScope を使用して複数の接続を開くと、SQL Server に対する通常のトランザクションから、MSDTC の設定が必要な分散トランザクションに変わります。

これは、接続に同じ接続文字列がある場合でも発生します。これは、「仕様による」問題の 1 つです。.net 3.5+で同じままである場合、フォローアップしていません

于 2009-03-13T22:13:35.717 に答える