读书人

存储过程动态创办TADOStoredProc,偶

发布时间: 2012-09-04 14:19:30 作者: rapoo

存储过程,动态创建TADOStoredProc,偶尔提示需要参数@o_ID,但未提供该参数
动态创建TADOStoredProc控件,连接adoconnection后;

spStartLh.ProcedureName :='LhStartInfo;1';
spStartLh.Parameters.Refresh;

在执行时偶尔(不一定都会,是偶尔)会报错:

过程 'LhStartInfo‘ 需要参数@o_ID,但未提供该参数。

存储过程如下:


CREATE PROCEDURE LhStartInfo
@channel int ,
@sdt varchar(25),
@xmmc varchar(60),
@Tm varchar(50),
@o_id bigint OUTPUT

AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO StartLh(channel,sdt,xmmc,state,tm) VALUES (@channel,@sdt,@xmmc,'未完成',@Tm)
SET @o_id = @@IDENTITY
END
END
GO


执行时如下:

with spStartLh do
begin
close;
s:=dateTimetoStr(self.dt);
Parameters.ParamValues['@sdt']:=s;
Parameters.ParamValues['@channel']:=TongDao;
Parameters.ParamValues['@xmmc']:=self.xmmc;
Parameters.ParamValues['@Tm']:=self.Tm;
Parameters.ParamValues['@o_id']:=0;
Prepared:=true;
ExecProc;
result:=Parameters.ParamValues['@o_id'];
dbid:=result;
end;


[解决办法]
ADOStoredProc1.Parameters.AddParameter
先添加参数
[解决办法]
类似这样使用:
Parameters.Clear;
Parameters.CreateParameter('@sdt',ftString,pdInput,25,s);
...
Parameters.CreateParameter('@o_id',ftInteger,pdOutput,0,0);
ExecProc;

读书人网 >.NET

热点推荐