我不确定我是否正确地做了这些。是因为我打开两个连接?无论错误如何,我都会关闭它们。我确实试过放入一些内部事务范围并将第二个范围设置为RequiresNew
。这两种方法是相互独立的,但如果一种方法失败,我需要它们都回滚。我觉得我可能需要修改我创建和关闭连接的方式。有什么想法吗?以下是我正在做的一些示例代码:
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
答案 0 :(得分:1)
每当使用TransactionScope打开多个连接时,它会从针对sql server的正常事务更改为分布式事务,这需要设置MSDTC。
即使连接具有相同的连接字符串,也会发生这种情况,这是“按设计”问题之一。如果它在.net 3.5 +
上保持不变,我没有跟进