使用CLI连接到db2失败,错误代码为-1531

时间:2019-05-09 07:43:18

标签: c++ db2 db2-luw

我正在尝试使用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:[
-------------------------

预期:应该建立连接。

2 个答案:

答案 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,它开始工作。