我的存储过程接受一个输出参数并返回记录集。
CREATE PROCEDURE MyProc
@EntityCode BIGINT, @ResValue INT OUTPUT
AS
BEGIN
SELECT .... WHERE Code=@EntityCode
SET @ResValue = ...
END
我需要同时接收输出参数和记录集的值。所以我这样做:
function GetData(const EntityCode: Int64): Integer;
var
Proc: TADOStoredProc;
PEntityCode: ADODB.TParameter;
PResValue: ADODB.TParameter;
begin
Proc := TADOStoredProc.Create(nil);
try
Proc.Connection := ADOConnection1;
Proc.CursorLocation := clUseServer;
Proc.ProcedureName := 'MyProc';
PEntityCode := Proc.Parameters.AddParameter;
PEntityCode.Name := '@EntityCode';
PEntityCode.DataType := ftLargeint;
PEntityCode.Value := EntityCode;
PResValue := Proc.Parameters.AddParameter;
PResValue.Name := '@ResValue';
PResValue.DataType := ftInteger;
PResValue.Direction := pdOutput;
//Proc.Prepared := True;
Proc.Open;
Result := PResValue.Value;
while not Proc.Eof do
begin
Proc.Next;
end;
finally
Proc.Free;
end;
end;
Recordset不为空,但PResValue.Value为0.如果我调用Proc.ExecProc,则记录集为空,但分配了PResValue.Value。是否可以同时接收记录集和输出参数值?
我发现如果MyProc的记录集只包含一条记录,则分配OUTPUT参数值。这是什么意思?
谢谢!
答案 0 :(得分:5)
解决方案是在访问输出变量之前关闭记录集:
Proc.Open;
while not Proc.Eof do
begin
Proc.Next;
end;
Proc.Close;
Result := PResValue.Value;