我在SLES 12機器上安裝了unixODBC-2.3.1-4.95.x86_64並編寫了一些應用程序。但是我遇到了使用unixODBC的PosgreSQL中的錯誤處理問題。檢索PostgreSQL本機錯誤代碼
要做到這一點,我創建了以下功能:
void checkDiag (SQLSMALLINT handleType, SQLHANDLE handle)
{
SQLRETURN rc = SQL_ERROR;
SQLCHAR sqlState[6];
SQLINTEGER nError;
SQLSMALLINT recnum = 0;
SQLCHAR eMsg[SQL_MAX_MESSAGE_LENGTH];
SQLCHAR nativeError[SQL_MAX_MESSAGE_LENGTH];
while (rc != SQL_NO_DATA_FOUND)
{
rc = SQLGetDiagRec (handleType,
handle,
recnum,
sqlState,
&nError,
eMsg,
255,
NULL);
if (rc != SQL_NO_DATA_FOUND)
{
SQLGetDiagField(handleType,
handle,
recnum,
SQL_DIAG_NATIVE,
nativeError,
255,
NULL);
printf("RECNUM %d\n sqlState = %s\n nError = %d\n Error Message %s\n nativeError %s \n",
recnum, sqlState, nError, (char *) eMsg, (char *)nativeError);
}
recnum++;
}
}
我一直在嘗試SQLGetDiagField使用diagId的不同變體:SQL_DIAG_MESSAGE_TEXT,SQL_DIAG_NATIVE,SQL_DIAG_SQLSTATE。 我得到了一切,但沒有PostgreSQL錯誤ID。 我不斷得到Postgresql錯誤代碼id = -1。
所以我的問題是:
是否有可能使用unixODBC的API來獲取本地PostgreSQL的錯誤代碼ID? 你能告訴我我做錯了什麼嗎?