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

时间:2010-04-07 12:50:12

标签: vb6 ado

有没有办法告诉我,只使用ADODB.Connection对象,它是否当前涉及交易?

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

4 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:2)

如果您正在连接到Microsoft SQL Server并且可以指望它足够快地响应(即它不在地球的另一端),您可以执行查询:

SELECT @@TRANCOUNT

答案 2 :(得分:0)

看起来您可以检查ADO状态。 http://msdn.microsoft.com/en-us/library/ms675068%28v=VS.85%29.aspx

你可能已经知道了这个其他部分,但无论如何我都会发布它。

这解释了事务如何在VB中使用ADO。 http://support.microsoft.com/kb/198024

答案 3 :(得分:0)

除非您自己跟踪,否则不能。连接对象没有处理事务状态的属性。你必须让你的proc在另一个表/设置区域设置一个标志,如果你必须拥有它(如果发生未处理的错误并且状态标志被“卡住”无效状态可能会有问题,你需要上来使用有效的“超时”或覆盖来忽略/ kill /覆盖前一个。)