调用存储过程【Delphi版】

A)返回结果为参数

  var
  Cn:TAdoConnection;
  Sp:TAdoStoredProc;
  recordCount: string ;
    begin
  Cn : = TAdoConnection.Create( nil );
  try
Cn.ConnectionString : = [数据库连接字符串];
Cn.LoginPrompt : = False;
Cn.KeepConnection : = True;
Cn.ConnectionTimeout: = 2 ;
try
Cn.Open;
Sp : = TAdoStoredProc.Create( nil );
try
Sp.Connection : = Cn;
Sp.Close;
Sp.ProcedureName : = ' getStudentAmount ' ;
Sp.Parameters.Refresh; // 参数的初始化要放在refresh之后
Sp.Parameters.ParamByName( ' @recordCount ' ).Value: = 0 ; // 存储过程中每一个参数都要
Sp.ExecProc; // 初始化,包括“返回参数”
recordCount: = inttostr(Sp.Parameters.ParamByName( ' @recordCount ' ).Value);
finally
Sp.Free;
end ;
except
on E:EoleException do
begin
ShowMessage( ' 数据库连接失败,请检查连接 ' );
end ;
end ;
finally
Cn.Free;
end ;
  end ;

B)返回结果为数据集

 1)单个数据集

var
Cn:TAdoConnection;
Sp:TAdoStoredProc;
nameFieldString:string;
begin
Cn := TAdoConnection.Create(nil);
Sp := TAdoStoredProc.Create(nil);
try
Cn.ConnectionString := [数据库连接字符串];
Cn.LoginPrompt := False;
Cn.KeepConnection := True;
Cn.ConnectionTimeout:=2;
try
Cn.Open;
Sp.Connection := Cn;
Sp.Close;
Sp.ProcedureName :='queryAllStudentInfo';
Sp.Parameters.Refresh;
Sp.Active:=True;//当返回结果是数据集时,一定要激活,但是“有参数时”必须放在参数初始化之后
Sp.open;//返回的是参数时只能用ExecProc,返回的是数据集时用Open,返回的既有参数又有数据集合也用Open
whilenot Sp.Eof do
begin
nameFieldString:=Sp.FieldByName('SName').AsString;
nameFieldString:=Trim(nameFieldString);
Sp.Next;
end;
except
on E:EoleException do
begin
ShowMessage('数据库连接失败,请检查连接');
end;
end;
finally
Sp.Free;
Cn.Free;
end;
end

 2)多个数据集

var
Cn:TAdoConnection;
Sp:TAdoStoredProc;
AdoQuery:TAdoQuery;
nameFieldString:
string;

aintf:_Recordset;
RecordsAffected:OleVariant;
begin
Cn :
= TAdoConnection.Create(nil);
try
Cn.ConnectionString :
=MainForm.DatabaseConnStr;
Cn.LoginPrompt :
= False;
Cn.KeepConnection :
= True;
Cn.ConnectionTimeout:
=2;
try
Cn.Open;
Sp :
= TAdoStoredProc.Create(nil);
AdoQuery:
=TAdoQuery.Create(nil);
try
Sp.Connection :
= Cn;
Sp.Close;
Sp.ProcedureName :
='CIB_GetCheckAccountFileInfo';
Sp.Active:
=True;//当返回结果是数据集时,一定要激活
Sp.Parameters.Refresh;

           Sp.Active:
=True;//当返回结果是数据集时,一定要激活,但是“有参数时”必须放在参数初始化之后

Sp.open;
//返回的是参数时只能用ExecProc,返回的是数据集时用Open,返回的既有参数又有数据集合也用Open

aintf:
=Sp.Recordset;
AdoQuery.Recordset:
=aintf;
whilenot AdoQuery.Eof do
begin
nameFieldString:
=AdoQuery.FieldByName('市场应用代码').AsString;
nameFieldString:
=Trim(nameFieldString);
showmessage(
'市场应用代码为:'+nameFieldString);
AdoQuery.Next;
end;

aintf:
=aintf.NextRecordset(RecordsAffected);
AdoQuery.Recordset:
=aintf;
whilenot AdoQuery.EOF do
begin
nameFieldString:
=AdoQuery.FieldByName('市场帐号').AsString;
nameFieldString:
=Trim(nameFieldString);
showmessage(
'市场帐号为:'+nameFieldString);
AdoQuery.Next;
end;
finally
AdoQuery.Free;
Sp.Free;
end;
except
on E:EoleException
do
begin
ShowMessage(
'数据库连接失败,请检查连接');
end;
end;
finally
Cn.Free;
end;
end;

 

 

 

 

你可能感兴趣的:(Delphi)