MSSQLConnection - 未记录引发的存储过程错误

时间:2014-11-21 16:40:00

标签: sql-server stored-procedures lazarus

我将Lazarus与TMSSQLConnector和TSQLQuery一起使用,以连接到SQL Server 2012数据库并执行存储过程。 我发现存储过程中引发的错误(来自缺少的参数或从存储过程本身的调用引发的异常)对于调用代码是不可见的。

当单步执行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语句中)。

1 个答案:

答案 0 :(得分:0)

我询问核心,大约一个月前(r28944,oct,29th)修复了(FPC)行李箱:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/fcl-db/src/sqldb/mssql/mssqlconn.pp?r1=27981&r2=28944&pathrev=28944