C++ Visual Studio C++;连接到DB2
我正在尝试使用数据库IBM DB2 Express-C编写一个C++程序。此外,我还使用Visual Studio 2015。通过IBM OLE DB Provider for DB2,我的Visual Studio成功连接到DB2。我可以看到表格和所有OK: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
然后我创建了新的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++;
}
}
}