Showing posts with label ODBC API C. Show all posts
Showing posts with label ODBC API C. Show all posts

Monday, May 2, 2011

ODBC3 の開発

1、ODBC基本概念

ODBCはRDBMSにアクセスするための共通のインタフェースです。

ハンドル
ODBCアプリケーションでは、データベース接続やSQL文など基本的機能をハンドルを使用して
定義し、一連のリソースを管理している

SQL_HANDLE_ENV 環境ハンドル
SQL_HANDLE_DBC データベース接続ハンドル
SQL_HANDLE_STMT ステートメントハンドル
SQL_HANDLE_DESC 記述子ハンドル

関数の戻り値とエラー処理
戻り値のデータ型はSQLRETURNである。
戻り値は、以下のように
SQL_SUCCESS 正常に終了した。
SQL_SUCCESS_WITH_INFO 正常に終了した
SQL_NO_DATA_FOUND これ以上のデータなし
SQL_ERROR 失敗した
SQL_INVALID_HANDLE 無効なハンドルがパラメータとしてわたれた。

SQL_ERRORまたははSQL_SUCESS_WITH_INFO場合、診断情報を生成されます。
SQLERROR(ODBCバージョン3より前)
SQLGetDiagRec(ODBCバージョン3以降)


2、開発流れ

ハンドルの割付
次のODBC関数を呼び出すことにより、ハンドルを割り当てることができます
・SQLAllocEnv,SQLAllocConnect,SQLAllocStmt( ODBCバージョン3前)
・SQLAllocHandle( ODBCバージョン3以降)


データソースへの接続
アプリケーションは環境ハンドルとデータベース接続ハンドルを割り付けてから、
データソースに接続します。
・SQLConnect
・SQLDriverConnect
・SQLBrowseConnect


SQL文の実行
二つの方法が用意されています。
・直接実行
・準備後の実行
直接実行する場合、SQLExecDirect関数でSQL文を直接実行します。
準備後に実行する場合、あらかじめSQLPrepare関数でSQL文を準備しておき,
SQLExecute関数で実行します。


結果セットの取り出し
SQLの実行結果(列)とアプリケーション・プログラム変数を関連つけるは、
SQLBindCol関数でバインドします。
結果セットから1行ずつ行を取り出すには、SQLFetch関数を使用する
結果セットからまとめて行を取り出すには、SQLExtendedFetch関数を使用する

トランザクション制御
ODBCの仕様では、デフォルトで自動コミットが有効になっています。
自動コミットのON/OFFを切り替えるには、SQLSetConnectionOption関数を使用する

自動コミットが無効な場合、コミット及びロールバックを明示的に行う。
トランザクション制御はSQLTransact関数を行います。


データベースとの切断
データベースの切断を行うには、SQLDisconnect関数を使用する。


ハンドルの解放
次の関数を呼び出すことにより、バンドルを解放することができます。
・SQLFreeStmt, SQLFreeConnect, SQLFreeEnv(ODBCバージョン3前)
・SQLFreeHandle(ODBCバージョン3以降)