ODBC APIによるOracle9iへの接続


C++によるデータベース接続

Oracleに接続する場合の接続文字列
「DSN=HOST;UID=USER;PWD=PASS」

MS-ACCESSに接続する場合の接続文字列
「Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\DataBase.mdb;」

ヘッダーファイル TestSqlConnectOra9i.h

#define	SQL_BUFF_MAX	1024
#define	SQL_CONDITION_MAX	512

#include	<iostream>

#include	<windows.h>

#include	<sql.h>
#include	<sqlext.h>
				


データベースを開く

#include	"TestSqlConnectOra9i.h"

using namespace std;

//	データベースを開く
int	OpenDatabase(HENV *henv, HDBC *hdbc, char connect_str[])
{
	printf("--- OpenDataBase ---\n");

	//
	RETCODE	rc;

	//
	char	ret_connect_str[SQL_MAX_OPTION_STRING_LENGTH];
	SWORD	ret_len;

	//環境ハンドルを割り振る
	rc	= SQLAllocEnv(henv);
	printf("SQLAllocEnv --> %d\n", rc);
	if(rc != 0){return -1;}

	//接続ハンドルを割り振る
	rc	= SQLAllocConnect(*henv, hdbc);
	printf("SQLAllocConnect --> %d\n", rc);
	if(rc != 0){return -1;}

	//データ・ソースに(拡張)接続する
	rc	= SQLDriverConnect( *hdbc, 0,
		(unsigned char *)connect_str,
		SQL_NTS,
		(unsigned char *)ret_connect_str, 
		(SWORD)sizeof( ret_connect_str ),
		&ret_len, SQL_DRIVER_NOPROMPT );

	printf("SQLDriverConnect --> %d\n", rc);
	
	if(rc == 0){
		;
	}else{
		return -1;
	}

	return 0;
}
				


データベースを閉じる

#include	"TestSqlConnectOra9i.h"

using namespace std;

//	データベースを閉じる
int	CloseDatabase(HENV *henv, HDBC *hdbc)
{
	printf("--- CloseDataBase ---\n");

	RETCODE	rc;

	//データ・サーバーからの切断
	rc	= SQLDisconnect(*hdbc);
	printf("SQLDisconnect --> %d\n", rc);
	if(rc != 0){return -1;}

	//接続ハンドルの解放
	rc	= SQLFreeConnect(*hdbc);
	printf("SQLFreeConnect --> %d\n", rc);
	if(rc != 0){return -1;}

	//環境ハンドルの解放
	rc	= SQLFreeEnv(*henv);
	printf("SQLFreeEnv --> %d\n", rc);
	if(rc != 0){return -1;}

	return 0;
}
				


main関数

#include	"TestSqlConnectOra9i.h"

using namespace std;


//エラーメッセージ
RETCODE	GetSqlError(HENV henv, HDBC hdbc, HSTMT hstmt, RETCODE rc,	//In
	SQLCHAR szSqlState[6], SQLCHAR szErrorMsg[256]);		//Out

//	データベースを開く
int	OpenDatabase(HENV *henv, HDBC *hdbc, char connect_str[]);

//	データベースを閉じる
int	CloseDatabase(HENV *henv, HDBC *hdbc);


void main()
{
	RETCODE	ret;

	HENV	henv;	//環境ハンドル
	HDBC	hdbc;	//接続ハンドル
		
	char	connect_str[SQL_CONDITION_MAX];

	sprintf(connect_str, "DSN=HOST;UID=USER;PWD=PASS");

	//	データベースを開く
	ret = OpenDatabase(&henv, &hdbc, connect_str);
	if(ret == 0){
		cout << "SUCCESS OPEN\n";
	}else{
		cout << "ERROR OPEN\n"; return;
	}

	//	データベースを閉じる
	ret = CloseDatabase(&henv, &hdbc);
	if (ret == 0){
		cout << "SUCCESS CLOSE\n";
	}else{
		cout << "ERROR CLOSE\n"; return;
	}

	return;	
}
				


結果

--- OpenDataBase ---
SQL_MAX_OPTION_STRING_LENGTH = 256
SQLAllocEnv --> 0
SQLAllocConnect --> 0
SQLDriverConnect --> 0
SUCCESS OPEN
--- CloseDataBase ---
SQLDisconnect --> 0
SQLFreeConnect --> 0
SQLFreeEnv --> 0
SUCCESS CLOSE
				


<戻る>

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!