나는 고려 다음 저장 프로 시저를 2014TStoredProcedure의 매개 변수에 대한 방향이 pdOutput입니까? 매개 변수를 열거하는 난이 델파이 코드를 사용</p> <pre><code>CREATE PROCEDURE [dbo].[usp2_BaseShow_By_Id]( @ShowId int, @Result int OUT ) </code></pre> <p>:
를 델파이 XE8 및 SQL Server를 사용하고
function TDBHelper<T>.OpenSingle(ProcedureName:string; Args: TArray<Variant>;
Transform: TTransformFunc<T>): TDBResult<T>;
var
Con:TADOConnection;
Proc:TADOStoredProc;
ArgIndex,ParamIndex: Integer;
begin
Result:=TDBResult<T>.Create;
Con:=GetConnection;
Proc:=TADOStoredProc.Create(nil);
try
try
Proc.Connection:=Con;
Proc.ProcedureName:=ProcedureName;
Proc.Parameters.Clear;
Proc.Parameters.Refresh;
ArgIndex:=0;
for ParamIndex := 0 to Proc.Parameters.Count-1 do begin
if(Proc.Parameters[ParamIndex].Direction in [pdInput,pdInputOutput])then begin
Proc.Parameters[ParamIndex].Value:=Args[ArgIndex];
Inc(ArgIndex);
end;
end;
Proc.Open;
Result.Data:=Transform(Proc);
Result.Success:=True;
Proc.Close;
Con.Close;
except
on E:Exception do begin
Result.Success:=False;
Result.E:=E;
end;
end;
finally
Proc.Free;
Con.Free;
end;
end;
이 있음을 알려줍니다 매개 변수는 다음과 같습니다. parameter direction :
pdReturnValue
저장 프로 시저의 결과.pdInput
저장 프로 시저의 첫 번째 매개 변수입니다.pdInputOutput
저장 프로 시저의 두 번째 매개 변수입니다.
위 목록의 3 번 항목에 놀랐습니다. 나는 pdOutput
을 기대했을 것입니다. 질문 :
- 왜이 매개 변수가
pdOutput
이 아닌pdInputOutput
입니까? - 어떤 상황에서 매개 변수는
pdOutput
으로 간주됩니까?
제 질문은 : 귀하의 게시물에 질문이 있습니까? 나는 진심으로 당신이 무엇을 요구하고 있는지 전혀 모른다. 질문의 제목은 문제가 발생했을 때 묻는 것으로 보입니다. –
나는 또한 당신이 묻고있는 질문에 대해 궁금합니다. 아, 알았습니다. 왜 두 번째 매개 변수가'pdOutput'이 아닌'pdInputOutput'인지 궁금합니다. 그게 다야? –
그런데'except' 블록이 완료되면'E'가 파괴됩니다. 그러나 당신은 객체에 대한 참조를 유지합니다. 대기중인 런타임 오류입니다. 그 일을 피하려면'AcquireExceptionObject'를 사용해야합니다. 'Free'를 호출 할 때'Close '를 호출하는 시점을 정말로 볼 수 없으며, 왜 예외를 잡는 것을 왜 귀찮게하는지 궁금합니다. 당신은 예외를 삼가는 것이 아닙니다. –