我们有一个实例,其中需要实现一个旧的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提交
发布于 2015-01-02 20:40:07
您必须使用sp_bindsession进行第二个连接(来自VB6组件),以加入主锁空间并共享事务。
您可以使用sp_getbindtoken获取令牌并将其传递给连接字符串,但显然,如果在@CONNSTRING末尾找到令牌,则必须调整VB6代码以绑定会话。
https://stackoverflow.com/questions/27712725
复制相似问题