回滚exec和sp_OA方法

时间:2014-12-30 21:20:11

标签: sql sql-server tsql vb6 rollback

我们有一个实例需要实现旧的vb6 dll并强制我们使用sp_OACreate和sp_OAMethod。鉴于代码将在事务中,有人知道回滚是否适用于该程序集中的代码?程序集将访问并更改数据。 或者sp_OAMethod调用和程序集中的db代码是否会在事务之外创建它自己的独立会话?

谢谢。

      begin tran
            declare @hr int
            declare @Object int
            declare @Return int
            declare @Output varchar(255)

            exec @hr= sp_OACreate 'DIssues32.Iclass',@object out
            IF @hr <> 0

            BEGIN

                EXEC sp_Getoaerrorinfo @object, @hr,@output out
                select @output

            END

            else
             begin


                exec @hr = sp_OAMethod @object,'Transfer', @Return , @LOCATION_NAME,
                    @TO_LOCATION_NAME, @QTY_REQUESTED,  @SYSUSER_ID, '', @CONNSTRING, True, '',  False, True

                IF @hr <> 0
                BEGIN
                    EXEC sp_Getoaerrorinfo @object, @hr,@output out
                    select @output
                    rollback
                END

                exec @hr= sp_OADestroy @object out

                print @return
             end

提交

1 个答案:

答案 0 :(得分:0)

您必须使用sp_bindsession进行第二次连接(来自VB6组件)才能加入主锁空间并共享事务。

您可以使用sp_getbindtoken来获取令牌并将其传递给连接字符串,但显然必须调整VB6代码以在@CONNSTRING <<}结尾处找到令牌时绑定会话/ p>