首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

使用ADOStoredProc组件,最后获得存储过程返回值式,如何出错并提示“…未提供返回值”

2012-04-05 
使用ADOStoredProc组件,最后获得存储过程返回值式,怎么出错并提示“……未提供返回值”?我的存储过程这样定义C

使用ADOStoredProc组件,最后获得存储过程返回值式,怎么出错并提示“……未提供返回值”?
我的存储过程这样定义

CREATE   PROCEDURE   KangTC
@PinYin   varchar(10),
@EndDate   DateTime,
@GetTotalSale   int   output
as

……………………

然后在程序中

        ADOStoredProc1.Close;
        ADOStoredProc1.Parameters.Refresh;

        ADOStoredProc1.Parameters.ParamByName( '@PinYin ').Value:=ADOQuery1.FieldByName( 'PinYin ').AsString;

        ADOStoredProc1.Parameters.ParamByName( '@EndDate ').Value:=DateToStr(DateTimePicker1.Date);
       
        ADOStoredProc1.ExecProc;
        GetGetTotalSale:=ADOStoredProc1.Parameters.ParamByName( '@GetTotalSale ').Value;


我欲用整型变量GetGetTotalSale得到最后存储过程返回的结果也就是@GetTotalSale的值,但是程序运行报错,“……未提供返回值”

怎么办啊?

[解决办法]
没有设置output参数
[解决办法]
存储过程:
CREATE PROCEDURE KangTC(
@PinYin varchar(10),
@EndDate DateTime)
as
@GetTotalSale int
begin
。。。。。
select @getTotalsale /*最后输出*/
end
程序:

try
spSel :=TADOStoredProc.Create(nil);
spSel.ConnectionString :=_pos_db_conStr;
with spSel do
begin
close;
ProcedureName := 'KangTC;1 ';
Parameters.Refresh;
Parameters.ParamByName( '@PinYin ').Value := 'test ';
Parameters.ParamByName( '@EndDate ').Value :=now;
try
open;
if not eof then
GetGetTotalSale :=fields[0].AsInteger;
except
end;
end;
finally
spSel.Free;
end;
[解决办法]
在TADOStoredProc当中由使用Refresh而自动将所对应的存储过程的参数填充给TADOStoredProc本身的时候,默认会把所有的OutPut参数配置为pdInputOutput,所以在执行的时候ADO自身就会提示你需要对相应的参数值进行初始化,比如本例当中可以将参数@GetTotalSale赋一个初始值,然后程序就可以调试通过了。

热点排行