我们有一个实例需要实现旧的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
提交
答案 0 :(得分:0)
您必须使用sp_bindsession
进行第二次连接(来自VB6组件)才能加入主锁空间并共享事务。
您可以使用sp_getbindtoken
来获取令牌并将其传递给连接字符串,但显然必须调整VB6代码以在@CONNSTRING
<<}结尾处找到令牌时绑定会话/ p>