我正在尝试使用C ++中的代码连接到远程db2服务器。我能够使用db2CLP连接到db2服务器。我已经使用以下命令配置了db2cli:
db2cli writecfg add -dsn alias -database BLUDB -host hostname -port 50000
甚至使用
进行了验证db2cli validate -dsn alias -connect -user userid -passwd password
我收到以下错误代码:本机错误代码= -1531 当我使用功能
SQLConnect(hdbc,
(SQLWCHAR *)db1Alias,
SQL_NTS,
(SQLWCHAR *)user,
SQL_NTS,
(SQLWCHAR *)pswd,
SQL_NTS);
也没有错误消息。 谁能指出我做错了什么吗?
我已经检查了IBM页面中的错误代码,但未在列表中找到-1531。 (https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/codes/src/tpc/db2z_n.html)
这是我正在使用的代码的摘要: 我是从ibm的样本部分(https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.sample.doc/doc/cli/s-dbconn-c.html)中摘录的
#define DBC_HANDLE_CHECK(hdbc, cliRC) \
if (cliRC != SQL_SUCCESS) \
{ \
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH + 1]; \
SQLWCHAR sqlstate[SQL_SQLSTATE_SIZE + 1]; \
SQLINTEGER sqlcode; \
SQLSMALLINT length, i; \
i = 1; \
/* get multiple field settings of diagnostic record */
while (SQLGetDiagRec(SQL_HANDLE_DBC, \
hdbc, \
i, \
sqlstate, \
&sqlcode, \
message, \
SQL_MAX_MESSAGE_LENGTH + 1, \
&length) == SQL_SUCCESS) \
{ \
printf("\n SQLSTATE = %s\n", sqlstate); \
printf(" Native Error Code = %d\n", sqlcode); \
printf("Error Meassgaes:%s\n", message); \
i++; \
} \
printf("-------------------------\n"); \
if (rc != 0) return rc; \
}
/* allocate a database connection handle */
cliRC = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
ENV_HANDLE_CHECK(henv, cliRC);
printf("\n Connecting to the database %s ...\n", db1Alias);
/* connect to the database */
cliRC = SQLConnect(hdbc,
(SQLWCHAR *)db1Alias,
SQL_NTS,
(SQLWCHAR *)user,
SQL_NTS,
(SQLWCHAR *)pswd,
SQL_NTS);
DBC_HANDLE_CHECK(hdbc, cliRC);
实际结果
Native Error Code = -1531
Error Meassgaes:[
-------------------------
预期:应该建立连接。
答案 0 :(得分:0)
以下是SQL01531N的文档。 -1531转换为SQL + 5位数字+ N(负号),因此转换为SQL01531N。
db2dsdriver.cfg配置文件包含数据库目录 供某些IBM使用的信息和客户端配置参数 数据服务器客户端和驱动程序。
CLI / ODBC初始化文件(db2cli.ini)包含各种 可用于配置CLI行为的关键字和值 以及使用CLI的应用程序。
当在.NET中指定数据源名称时,返回此消息。 使用“ DSN”连接关键字但指定了连接字符串 数据源名称不能在以下两个位置中找到:
- 在db2dsdriver.cfg配置文件中使用“ dsn别名”配置关键字指定
- 在db2cli.ini配置文件中指定为节标题
在代码中如何设置 db1Alias ?配置的DSN别名是什么?解决该问题,它应该可以工作。
答案 1 :(得分:0)
此修复程序正在更新应用程序的字符集。以前它设置为Unicode。
我转到解决方案属性->通用->字符集,并将其值设置为Not Set
,它开始工作。