Соединение с db2 с помощью cli завершается неудачно с кодом ошибки -1531 - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь подключиться к удаленному серверу db2, используя мой код на c ++.Я могу подключиться к серверу db2, используя db2CLP для подключения к серверу.Я настроил db2cli, используя следующие команды:

db2cli writecfg add -dsn alias -database BLUDB -host hostname -port 50000

и даже проверил его, используя

db2cli validate -dsn alias -connect -user userid -passwd password

Я получаю код ошибки: Native Error Code = -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 голосов
/ 21 мая 2019

Исправление обновляло набор символов приложения. Ранее был установлен Unicode.

Я перешел к свойствам решения-> Genral-> Набор символов и установил его значение на Not Set, и оно начало работать.

0 голосов
/ 09 мая 2019

Вот документация для SQL01531N . -1531 преобразуется в SQL + 5 цифр + N (отрицательный), поэтому SQL01531N.

Файл конфигурации db2dsdriver.cfg содержит каталог базы данных информация и параметры конфигурации клиента для использования некоторыми IBM клиенты и драйверы сервера данных.

Файл инициализации CLI / ODBC (db2cli.ini) содержит различные ключевые слова и значения, которые можно использовать для настройки поведения интерфейса командной строки и приложения, использующие CLI.

Это сообщение возвращается, когда имя источника данных указано в Строка соединения с ключевым словом соединения DSN, но с указанным Имя источника данных не может быть найдено ни в одном из следующих мест:

  • Указывается с помощью ключевого слова конфигурации "dsn alias" в файле конфигурации db2dsdriver.cfg
  • Указывается в качестве заголовка раздела в файле конфигурации db2cli.ini

Как и где в вашем коде установлена ​​ db1Alias ​​? Какое псевдоним DSN настроено? Исправьте это, и оно должно работать.

...