to Pst:
我帮你做了个全面测试。
过程如下:
1:先直接使用ADO来做。
ADO1 为仅需要一个参数的存储过程,利用其RETURN_VALUE来获得返回值。对应的存储过程为:
CREATE PROCEDURE demo
( @t1 char(7) )
AS
if not exists(select * from t_Chzl where t1=@t1) return 1000
else select t1,t3 from t_table where t1=@t1
ADO2使用两个参数,其中参数@out用来返回
CREATE PROCEDURE demo_1
(@t1 char(7) ,@out int OUTPUT )
AS
if not exists(select * from t_Chzl where t1=@t1) begin
set @out=101
return @out
end
else select t1,t3 from t_table where t1=@t1
两个存储过程在测试中都可以成功返回所需要的值。OK!
2、在三层结构中使用。
客户端对应两个ClientDataSet分别对应上边的两个名称。
2. 1 对ADO2进行处理:
因为在执行了CDS之后,ADO2对应的存储过程将返回值放在参数@out中,
所以执行完之后,ADO2的参数就只有@out一个了。从该参数可以获得你想要的值。
这也是在程序运行第二次时会出现“parameter '@p1'not found”的原因。
所以在执行了ClientDataSet一次之后,必须使用FETCHPARAMS来重新获得
APPSERVER传过来的参数!
2. 2对ADO1来处理:
关于这个,我有点疑惑:
A、对参数RETURN_VALUE也必须赋值!!
B、RETURN_VALUE并没有正确返回相关的值。
(你设置为多少,执行后,他还是多少!那么,这个参数在多层结构中有什么用呢?)
C、使用这个方法在执行后,却不需要重新再从APPSERVER端获得参数!
对于这个情况,我想再跟进一下,有结果再通知你吧。