TADOStoredProc参数问题
一、 关于动态参数创建:
1、CreateParameter方法; // 惯用此招
var
StProc: TADOStoredProc;
iPara1: byte;
iPara2: byte;
begin
StProc := TADOStoredProc.Create(nil);
StProc.Close;
StProc.Connection := con; // TADOConnection
StProc.ProcedureName := SP_NAME; // StoredProc Name
with StProc.Parameters do
begin
Clear;
CreateParameter('@para1', ftInteger, pdInput, 1, ipara1);
CreateParameter('@para2', ftInteger, pdOutput, 1, Null);
end;
StProc.prepared;
try
StProc.ExecProc;
//StProc.open; // 返回数据集
finally
StProc.free; // 如使用数据感知控件,慎用free,数据从何而来
end;
end;
2、AddParameter方法
// 省去变量声明、创建、执行过程,同上
with StProc.Parameters.AddParameter do
begin
Name := '@para1';
DataType := ftInteger;
Direction := pdInput;
value := iPara1;
end;
with StProc.Parameters.AddParameter do
begin
Name := '@para';
DataType := ftWideString;
Direction := pdOutput;
end;
二、关于静态参数刷新
StProc.ProcedureName:='getid';
StProc.Parameters.Refresh;
// 切记,刷新后赋值,下为Delphi help 帮助原文。
// (个人意见)参数就已分配内存,故赋值在后
// to ensure a parameter collection has the most up to date information on
// available parameters.
StProc.Parameters.ParamByName('@para1').value := iPara1;
后记:// 偶有闲暇,唯恐遗忘(此毛病已历来久,多次浪费时间), 遂信手记下。本意如此!
// 后发现,有友关注,并发以邮件。深感上次写之轻浮,唯恐误导于人,进而补充如上。