まさか、C++で生のODBC使ってDBに繋ぐことをする日がくるとは思ってなかった。
とりあえずメモ。
#include <stdio.h>
#include <tchar.h>
// ODBC
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#pragma comment (lib, "odbc32.lib")
int main(int argc, char **argv)
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
RETCODE rc;
SQLAllocEnv(&henv);
SQLAllocConnect(henv, &hdbc);
rc = SQLConnect(
hdbc,
_T("ODBCデータソースで指定した名前"), SQL_NTS, _T("ユーザ名"), SQL_NTS, _T("パスワード"), SQL_NTS);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
{
// 接続できなかったので後処理をしてね
}
SQLAllocStmt(hdbc, &hstmt);
if (SQLExecDirect(
hstmt,
_T("select column1, .....SQL文!"),
SQL_NTS) == SQL_SUCCESS)
{
long column1 = 0L; // カラムの値を入れるための変数 カラム数ぶん準備してね
SQLINTEGER pcbValue;
SQLBindCol(
hstmt, 1, SQL_C_LONG, &empno, sizeof(column1), &pcbValue); // 変数とカラムを対応付け 第二引数がカラムのインデックス(1はじまり) 第三引数で型を指定
while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
// データ取れたのでお好きにどうぞ
}
}
// 後処理
SQLFreeStmt(hstmt, SQL_DROP);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
return 0;
}
こんなもんかな...。
正直メンドクサイのでクラス化してしまいたい衝動にかられる。
既にC++から気楽に使えるものがあったりするのだろうか。
DBに繋ぐプログラムは、.NETになってからしかやったことないので疎いわぁ。