我在SLES 12机器上安装了unixODBC-2.3.1-4.95.x86_64并编写了一些应用程序。但是我遇到了使用unixODBC在PosgreSQL中处理错误的问题。
为此,我创建了以下功能:
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错误代码? 你能告诉我我做错了吗?
答案 0 :(得分:0)
我找到了解决方案。
配置文件odbcinst.ini的内容如下:
[PostgreSQL]
Description=PostgreSQL ODBC driver
Driver=/usr/lib64/unixODBC/libodbcpsql.so
FileUsage=1
在我更改配置文件中的驱动程序条目的描述后,我能够获得PostgreSQL本机错误代码。
[PostgreSQL]
Description=PostgreSQL ODBC driver
Driver=/opt/PostgreSQL/psqlODBC/lib/psqlodbcw.so
FileUsage=1
psqlodbcw.so 库由EnterpriseDB PostgreSQL提供,可以在此处下载https://www.postgresql.org/download/linux/suse/。
经过这些修改后,我可以获得原生错误代码。使用上面提供的代码,postgres错误代码值将写入 sqlState 。