C++ Visual Studio C++;连接到DB2

C++ Visual Studio C++;连接到DB2,c++,visual-studio,db2,C++,Visual Studio,Db2,我正在尝试使用数据库IBM DB2 Express-C编写一个C++程序。此外,我还使用Visual Studio 2015。通过IBM OLE DB Provider for DB2,我的Visual Studio成功连接到DB2。我可以看到表格和所有OK: 然后我创建了新的C++程序,我成功地连接了几个头文件,其中一些在我的DB2目录中找到了,比如 SqLcli1.H < /P> #pragma once #include "targetver.h" #include <stdi

我正在尝试使用数据库IBM DB2 Express-C编写一个C++程序。此外,我还使用Visual Studio 2015。通过IBM OLE DB Provider for DB2,我的Visual Studio成功连接到DB2。我可以看到表格和所有OK:

然后我创建了新的C++程序,我成功地连接了几个头文件,其中一些在我的DB2目录中找到了,比如<强> SqLcli1.H<强> < /P>

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
#include <stdlib.h> 
#include <string.h> 
#include <sqlcli1.h>
#include <windows.h> 
编译时没有错误,但无法连接到数据库。当程序执行到块时

// Connect to data source  
            retcode = SQLConnect(hdbc, (SQLWCHAR*) "DATABASE=SAMPLE;HOSTNAME=localhost", SQL_NTS, (SQLWCHAR*) "db2admin", SQL_NTS, (SQLWCHAR*) "password", SQL_NTS);
                if (retcode != SQL_SUCCESS) {
                    printf(">--- Error while connecting to database:");
                    printf("SQLConnect: %d\n", retcode);
                }
我看到---连接到数据库时出错:SQLConnect:-2 这意味着什么?我做错了什么?我也试过:

retcode = SQLConnect(hdbc, (SQLWCHAR*) "SAMPLE", SQL_NTS, (SQLWCHAR*) "db2admin", SQL_NTS, (SQLWCHAR*) "password", SQL_NTS);
但它也不起作用。也许第二个论点在其他方面应该是这样的

改变 我尝试使用这个函数SQLGetDiagRec我创建了一些变量

我还更改了连接块

// Connect to data source  
            retcode = SQLConnect(hdbc, (SQLWCHAR*) "SAMPLE", SQL_NTS, (SQLWCHAR*) "db2admin", SQL_NTS, (SQLWCHAR*) "password", SQL_NTS);
                if (retcode != SQL_SUCCESS) {
                    printf(">--- Error while connecting to database:");
                    printf("SQLConnect: %d\n", retcode);

                    if ((retcode == SQL_SUCCESS_WITH_INFO) || (retcode == SQL_ERROR)) {
                        // Get the status records.  
                        i = 1;
                        while ((rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hdbc, i, SqlState, &NativeError,
                            Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) {
                            cout << SqlState;
                            cout << i;
                            cout << NativeError;
                            cout << Msg;

                            i++;
                        }
                    }
                }
//连接到数据源
retcode=SQLConnect(hdbc,(SQLWCHAR*)“SAMPLE”,SQL_NTS,(SQLWCHAR*)“db2admin”,SQL_NTS,(SQLWCHAR*)“password”,SQL_NTS);
if(retcode!=SQL\u SUCCESS){
printf(“>---连接到数据库时出错:”;
printf(“SQLConnect:%d\n”,retcode);
if((retcode==SQL_SUCCESS_WITH_INFO)| |(retcode==SQL_ERROR)){
//获取状态记录。
i=1;
而((rc2=SQLGetDiagRec(SQL\u HANDLE\u STMT、hdbc、i、SqlState和NativeError,
Msg,sizeof(Msg),&MsgLen)!=SQL(无数据){

cout如果对任何CLI函数的调用未返回
SQL\u SUCCESS
,则错误处理应使用
SQLGetDiagRec()
获取警告或错误的详细信息

文档:

我尝试了它,但是函数
SQLGetDiagRec()
没有打印任何内容。
SQLWCHAR       SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
    SQLINTEGER    NativeError;
    SQLSMALLINT   i, MsgLen;
    SQLRETURN     rc1, rc2;
// Connect to data source  
            retcode = SQLConnect(hdbc, (SQLWCHAR*) "SAMPLE", SQL_NTS, (SQLWCHAR*) "db2admin", SQL_NTS, (SQLWCHAR*) "password", SQL_NTS);
                if (retcode != SQL_SUCCESS) {
                    printf(">--- Error while connecting to database:");
                    printf("SQLConnect: %d\n", retcode);

                    if ((retcode == SQL_SUCCESS_WITH_INFO) || (retcode == SQL_ERROR)) {
                        // Get the status records.  
                        i = 1;
                        while ((rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hdbc, i, SqlState, &NativeError,
                            Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) {
                            cout << SqlState;
                            cout << i;
                            cout << NativeError;
                            cout << Msg;

                            i++;
                        }
                    }
                }