1

我在 Windows Server 2008 R2 上使用 Delphi-XE2 Enterprise、SQLServer 2008 R2。当引发 SQL 错误时,DataSnap 服务器会捕获它并将其返回给客户端应用程序。这一切都有效,除了它被截断为 256 个字符的错误消息。

引发错误时 DataSnap 服务器的堆栈跟踪显示,当使用该[file:Data.DBXDynalink]TDBXMethodTable.RaiseError()方法通过 DBX 框架检索 SQL DB 错误时,SQL 错误消息被截断。RaiseError()方法中的以下代码行将MessageLength设置为 256,即使错误消息更长。因此返回给客户端的错误消息永远不会超过 256 个字符。

Status := FDBXBase_GetErrorMessageLength(DBXHandle, DBXResult, MessageLength);

FDBXBase_GetErrorMessageLengthTDBXCommon_GetErrorMessageLength类型,定义为:

TDBXCommon_GetErrorMessageLength = function(Handle: TDBXCommonHandle; LastErrorCode: TDBXErrorCode; out ErrorLen: TInt32): TDBXErrorCode; stdcall;

有没有办法增加缓冲区大小以允许将更多的数据库错误发送到客户端(例如,512 个字符),或者这只是 DBX 框架的限制?

4

1 回答 1

1

@Sertac 发现了一个与 Carlos 非常相似的问题,即驱动程序截断错误消息。Carlos 发现更改 midas.dll 以增加错误缓冲区大小可以解决他的问题。我确定解决方案对于我的问题是相同的。

感谢@Sertac 提供指向 Carlos 问题的链接:

协调错误:有人遇到过截断错误消息的问题吗?

于 2012-04-30T15:48:57.377 回答