内部Transactions Transactions错误:“与底层事务管理器的通信失败”

时间:2009-03-13 22:05:04

标签: tsql .net-3.5 transactionscope

我不确定我是否正确地做了这些。是因为我打开两个连接?无论错误如何,我都会关闭它们。我确实试过放入一些内部事务范围并将第二个范围设置为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

1 个答案:

答案 0 :(得分:1)

每当使用TransactionScope打开多个连接时,它会从针对sql server的正常事务更改为分布式事务,这需要设置MSDTC。

即使连接具有相同的连接字符串,也会发生这种情况,这是“按设计”问题之一。如果它在.net 3.5 +

上保持不变,我没有跟进