仅使用ADODB.Connection对象,有没有办法判断它当前是否参与了事务?
我希望能够在连接对象本身上进行测试,而不依赖于保持旁边的一个布尔值更新。
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
SELECT @@TRANCOUNT
看起来您可以检查ADO状态。http://msdn.microsoft.com/en-us/library/ms675068%28v=VS.85%29.aspx
您可能已经知道了另一部分,但我还是会发布它。
这解释了在VB中如何使用ADO进行事务处理。 http://support.microsoft.com/kb/198024
ADODB.Connection
的封装就好了!我一直在考虑这个想法,以便最小化对现有报告提取代码的更改,让用户可以通过无线连接运行报告(在我们的情况下,通过自定义RPC服务器进行连接)。 - Mike Spross