これを正しく実行しているかどうかわかりません。私は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