救命,三层结构中,中间层里执行存储过程问题 ( 积分: 200 )

  • 主题发起人 主题发起人 kangshijiu
  • 开始时间 开始时间
K

kangshijiu

Unregistered / Unconfirmed
GUEST, unregistred user!
我用三层结构,中间层中执行的存储过程,如果存储过程中Rollback了就报错,返回值也就不回传了,有没有办法把值传过来啊。
例:CREATE procedure test
@test_in Integer,
@test_out Integer output
as
begin
Tran
set @test_out =3
select @test_in
goto Error
commit Tran
Return
Error:
Rollback Tran
raiserror 99999 '0000'
return @test_out
GO
中间层用adoQuery,客户端用clientDataSet得到参数,如果中间层没问题,cds会返回值,
中间层中执行事务回滚了后中间层报错就没有返回值了,怎么办。
还有,存储过程返回的错误信息也给中间层包装,也不知道怎么样直接传过来原信息。
 
raiserror 后的语句根本不会执行,怎么个返回法?
 
return值可以不管,想返回@test_out的值列
 
由于存储过程报错,在二层结构中是可以得到output类型的值的,三层中客户端的cds是返回值没有。
 
在中间层创建远程方法调用存储过程,用参数返回返回值
 
难道不能直接返回吗
 
解决了,中间层的事务支持要选support Transctions(支持事条)而不是requires a Transactions(需要事务),就可以了。选后者时,存储过程中事务回滚后,中间层还要提交一次事务导致中间层报错而没有返回值。
 
这个结果还是我们项目老大找出来的。
 
后退
顶部