0

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

1 回答 1

1

每当您使用 TransactionScope 打开多个连接时,它都会从针对 sql server 的普通事务变为分布式事务,这需要设置 MSDTC。

即使连接具有相同的连接字符串也会发生这种情况,这是“设计”问题之一。如果在 .net 3.5+ 上保持不变,我还没有跟进

于 2009-03-13T22:13:35.717 回答