VB6 ADO连接 - 如何检查是否在事务中?

Tom*_*sky 11 vb6 ado

有没有办法告诉,只使用ADODB.Connection对象,它是否当前涉及一个事务?

我希望能够在连接对象本身上测试它,而不依赖于更新旁边的布尔值.

jac*_*jac 10

所述的BeginTrans方法可被用作返回事务的嵌套级别的函数.如果您创建一个属性来存储它,您可以在需要的地方查看它是否大于0.当您提交或回滚时,您需要自己减少属性.

Private m_TransLevel As Long

Public Property Get TransactionLevel() As Long
    TransactionLevel = m_TransLevel
End Property
Public Property Let TransactionLevel(vLevel As Long)
    m_TransLevel = vLevel
End Property

Public Sub SaveMyData()

    TransactionLevel = adoConnection.BeginTrans()
    ...

End Sub
Run Code Online (Sandbox Code Playgroud)

如果级别> 1,您还可以调整返回值以在返回True/False的函数内工作.我也不喜欢这样,但它看起来像这样(没有错误处理)

Public Function IsConnectionInsideTransaction(ByVal vADOConnection as ADOBD.Connection) As Boolean
    Dim intLevel As Integer

    If vADOConnection.State = AdStateOpen Then
        intLevel = vADOConnection.BeginTrans()
        IsConnectionInsideTransaction = (intLevel > 1)
        vADOConnection.RollbackTrans
    End If

End Function
Run Code Online (Sandbox Code Playgroud)