Ich bin mir nicht sicher, ob ich irgendetwas richtig mache. Liegt es daran, dass ich zwei Verbindungen öffne? Ich schließe sie unabhängig von Fehlern. Ich habe versucht, einige innere Transaktionsbereiche hinzuzufügen und den zweiten auf RequiresNew
zu setzen. Die beiden Methoden sind voneinander unabhängig, aber wenn einer fehlschlägt, müssen beide beide zurückgesetzt werden. Ich muss vielleicht ändern, wie ich die Verbindungen erschaffe und schließe. Irgendwelche Gedanken? Hier einige Beispiel-Code von dem, was ich tue:Innerer Transaktionssteuerungsfehler: "Die Kommunikation mit dem zugrunde liegenden Transaktionsmanager ist fehlgeschlagen"
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