データベースを使用してC++プログラムを作成しようとしています - IBM DB2 Express-C。また、Visual Studio 2015を使用しています.IBM OLE DB Provider for DB2を使用すると、Visual StudioがDB2に正常に接続されました。私は私のDB2ディレクトリにあり、そこからいくつかの、例えばsqlcli1.hVisual Studio C++がDB2に接続
、私は成功し、いくつかのヘッダファイルを接続し、その後、私は新しいC++プログラムを作成しました:私はテーブルと、すべてOKが見ることができます
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string.h>
#include <sqlcli1.h>
#include <windows.h>
以下は、メインプログラムのコードです。 Visual Studioに正常に接続されたデータベースに接続しようとしています。
#include "stdafx.h"
int main()
{
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
SQLCHAR * OutConnStr = (SQLCHAR *)malloc(255);
SQLSMALLINT * OutConnStrLen = (SQLSMALLINT *)malloc(255);
// Allocate environment handle
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set the ODBC version environment attribute
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
// Allocate connection handle
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// 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);
}
// Allocate statement handle
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
printf("\nAllocate Connection handle successfully.");
// Process data
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
system("pause");
return 0;
}
コンパイル時にエラーはありませんが、データベースに接続することはできません。プログラムの実行はブロックになります。
// 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);
しかし、それも動作しません。 2番目の議論は他の何かのように見えますか? を変更
私はまた
// 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++; } } }
私の接続ブロックを変更しかし、何も変わっていないいくつかの変数に
SQLWCHAR SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN rc1, rc2;
を作成してSQLGetDiagRecこの機能使用を試してみました。誰にも分かりますか?
私は**それは**質問を変更しようとしたが、関数 'SQLGetDiagRecの()'は何も印刷されません。 – Vladimir