【问题标题】:Transaction support in ADODB for legacy VB6 ApplicationADODB 中对旧版 VB6 应用程序的事务支持
【发布时间】:2012-01-09 17:20:28
【问题描述】:

我们正在将旧版 VB6 应用程序从 Sybase 后端迁移到 SQL Server 2008 R2。大多数应用程序都很好地进行了转换,但是我有一个应用程序使用命名事务在代码中使用严格的事务控制。根据一些彻底的测试,客户端或服务器似乎根本不支持“begin”、“commit”和“rollback”命令。

执行如下命令:

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

然后在其后面加上@@trancount 总是产生 0。此外,任何在代码中稍后提交事务的尝试都会产生 3902 错误。

使用这个命令:

conSQL.BeginTrans

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

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    以防万一您还没有找到:

    INFO: Understanding ADO Transactions with MS SQL Server

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

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

    【讨论】:

      【解决方案2】:

      好吧,经过一堆测试,事实证明,如果您在 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        相关资源
        最近更新 更多