DBX将SQL错误截断为256个字符

时间:2012-04-27 19:35:28

标签: sql-server delphi error-handling datasnap truncated

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

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

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

FDBXBase_GetErrorMessageLength 的类型为 TDBXCommon_GetErrorMessageLength ,其定义为:

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

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

1 个答案:

答案 0 :(得分:1)

@Sertac发现了一个非常类似的问题,卡洛斯在驱动程序中截断了错误消息。 Carlos发现更改midas.dll以增加错误缓冲区修复了他的问题。我确定解决方案对我的问题是一样的。

感谢@Sertac提供卡洛斯问题的链接:

Reconcile Error: Has anyone had problems with truncated error messages?