2012-01-09 53 views
2

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

执行这样的命令:

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

,然后用@@ TRANCOUNT以下它总是产生0。另外,在以后的代码提交事务的任何尝试会产生3902错误。

使用这个命令:

conSQL.BeginTrans 

确实出现了产生某种行为的变化,但将@@ trancount仍然是零,而且这种方法不支持嵌套事务,这是什么是必需的代码。

我试图改变隐式事务模式,各种连接字符串参数,更无济于事。有没有人有关于如何使这种类型的功能工作的任何建议?我在网上找到的这种类型的功能样本表明,如果在代码中明确执行,嵌套命名事务是受支持的。

感谢您的帮助。

回答

0

好了,一堆的测试之后,事实证明,如果你使用(类型的至少一个)游标中读取在VB中,它似乎扔掉了所有与交易有关的规定:

rec.Open test_query, cn, adOpenStatic, adLockReadOnly 

所以在这种通过删除此语句中的adOpenStatic CursorType,事务控制(开始tran,提交tran等)再次开始工作。我正在研究我有哪些其他替代方案可用于返回记录集导航,但是我可以在测试应用程序中重复此错误/问题。

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