我正在使用Lazarus與TMSSQLConnector和TSQLQuery一起連接到SQL Server 2012數據庫並執行存儲過程。 我發現存儲過程中引發的錯誤(從缺少參數或調用存儲過程本身引發的異常)不會對調用代碼可見。MSSQLConnection - 沒有記錄引發的存儲過程錯誤
當通過mssqlconn.pp步進,我可以看到以下程序的執行過程中引發的錯誤:
procedure TMSSQLConnection.Execute(const cmd: string);
begin
DBErrorStr:='';
DBMsgStr :='';
CheckError(dbcmd(FDBProc, PChar(cmd)));
CheckError(dbsqlexec(FDBProc));
CheckError(dbresults(FDBProc));
end;
,並傳遞通過DBMsgHandler機能恢復。
但是,構建的DBMsgStr永遠不會被評估,因爲dbsqlexec調用不會返回FAIL代碼。
因爲DBMsgStr不公開,所以我無法從外部評估它(我也不想因爲這會引起線程問題)。
要重現,請創建一個需要參數的存儲過程。 通過將TSQLQuery對象的SQL屬性設置爲'EXEC'proc name「'並調用ExecSQL(不向SQL語句添加參數)來調用存儲過程。