gpt4 book ai didi

sql-server - TADOStoredProc 返回记录集或输出参数的值(不是两者)

转载 作者:行者123 更新时间:2023-12-03 15:27:21 26 4
gpt4 key购买 nike

我的存储过程采用一个输出参数并返回记录集。

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;

记录集不为空,但 PResValue.Value 为 0。如果我调用 Proc.ExecProc,则记录集为空,但分配了 PResValue.Value。是否可以同时接收记录集和输出参数值?

我发现如果 MyProc 的记录集仅包含一条记录,则分配 OUTPUT 参数的值。这是什么意思?

谢谢!

最佳答案

解决方案是在访问输出变量之前关闭记录集:

Proc.Open;
while not Proc.Eof do
begin
Proc.Next;
end;
Proc.Close;
Result := PResValue.Value;

关于sql-server - TADOStoredProc 返回记录集或输出参数的值(不是两者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14357437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com