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