ADODB中针对旧版VB6应用程序的事务支持

时间:2012-01-09 17:20:29

标签: sql sql-server sql-server-2008 tsql transactions

我们正在将旧版VB6应用程序从Sybase后端迁移到SQL Server 2008 R2。大多数应用程序正在顺利完成转换,但是我有一个应用程序使用命名事务在代码中使用严格的事务控制。基于一些彻底的测试,似乎客户端或服务器根本不支持“开始”,“提交”和“回滚”命令。

执行如下命令:

conSQL.Execute "begin tran CaptureSch" ', , adExecuteNoRecords

然后使用@@ trancount跟随它总是产生0.此外,稍后在代码中提交事务的任何尝试都会产生3902错误。

使用此命令:

conSQL.BeginTrans

确实会产生某种行为更改,但是@@ trancount仍然为零,并且此方法不支持嵌套事务,这是代码所需的。

我尝试更改隐式事务模式,各种连接字符串参数等等都无济于事。有没有人对如何使这种功能有效有任何建议?我在网上找到的这类功能的示例表明,如果在代码中明确执行,则支持嵌套的命名事务。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

万一你还没有找到这个:

INFO: Understanding ADO Transactions with MS SQL Server

但是,文章中的预期行为似乎与您在此处报告的内容不相符。

另请注意,ADO连接方法BeginTrans确实支持嵌套事务,如this MSDN article中所确认。您使用的OLE DB提供程序是否也支持嵌套事务是另一回事。

答案 1 :(得分:0)

好吧,经过一堆测试后,如果你在VB中使用(至少一种类型的)游标,它似乎会抛出所有与事务相关的状态:

 rec.Open test_query, cn, adOpenStatic, adLockReadOnly

因此,在这种情况下,通过删除此语句中的adOpenStatic CursorType,事务控制(begin tran,commit tran等)将再次开始工作。我正在研究返回记录集导航的其他替代方法,但我可以在测试应用程序中重复此错误/问题。

我也在这里交叉发布: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/4933d0b0-d4a1-4692-851a-ef7a8be7b966