2009-03-13 11 views
0

これを正しく実行しているかどうかわかりません。私は2つの接続を開いているからですか?私はエラーに関係なくそれらを閉じています。私はいくつかの内部トランザクションスコープを入れて、第2のトランザクションスコープをRequiresNewに設定しようとしました。 2つの方法は互いに独立していますが、いずれかが失敗した場合、両方をロールバックする必要があります。私はコネクションをどのように作成したり閉じたりしているのかを修正しなければならないかもしれません。何かご意見は?あなたはのTransactionScopeを使用して1つの以上の接続を開くたびInner Transactionscopeエラー:「基盤となるトランザクションマネージャとの通信に失敗しました」

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 

答えて

1

、それはMSDTCを設定する必要が分散トランザクションにSQL Serverに対して、通常のトランザクションから変更されます。ここで私がやっていることのいくつかのサンプルコードです。

これは、接続に「設計上の問題」の1つである接続文字列が同じ場合でも発生します。私はそれが同じで残っている場合、私はフォローアップしていません。

関連する問題