目次
ODBCとは
ODBC (Open Database Connectivity) は、リレーショナル・データベース・マネージメント・システム (RDBMS) にアクセスするための共通インタフェースです。
呼び出しレベル・インタフェース (Call Level Interface: CLI) が統一されていることにより、アプリケーションが呼び出すAPIの仕様が、複数の異なるRDBMS間で統一されています。
ODBCプログラミング入門
ハンドルの割り付け
ODBCアプリケーションでは、データベース接続やSQL文などの基本的な機能をハンドルを使用して定義し、一連のリソースを管理します。
次のODBC関数を呼び出すことにより、ハンドルを割り当てることができます。
- SQLAllocEnv, SQLAllocConnect, SQLAllocStmt (ODBCバージョン3より前)
- SQLAllocHandle (ODBCバージョン3以降)
ODBCバージョン3より前のバージョンでは、SQLAllocEnv関数やSQLAllocConnect関数、SQLAllocStmt関数のように、割り付けるハンドルの種類ごとに関数が分かれていましたが、ODBCバージョン3からSQLAllocHandle関数に統一されました。
環境ハンドルおよび接続ハンドルを割り当てる例を次に示します。
SQLHENV henv;
SQLHDBC hdbc;
SQLRETURN rc;
rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
...
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
データ・ソースへの接続
アプリケーションは、環境ハンドルと接続ハンドルを割り付けてからデータ・ソースに接続します。接続には、次の3種類のいずれかのODBC関数を使用します。
- SQLConnect
- SQLDriverConnect
- SQLBrowserConnect
SQLConnect関数は最も簡単な接続関数で、データ・ソース名 (DSN)とユーザー名、パスワードを指定して、データ・ソースに接続します。
SQLDriverConnect関数は、接続文字列を指定してデータ・ソースに接続します。接続文字列には、データ・ソース名やユーザー名、パスワードだけでなく、様々な属性を指定することができます。ただし、プラットフォームに依存するため、汎用性が無くなることがあります。
データ・ソースとの接続を確立した後、SQLSetConnectOption関数を使用して、接続オプションを指定することができます。
SQL文の実行
ODBCには、SQL文を実行するために2つの方法が用意されています。
- 直接実行
- 準備後の実行
直接実行する場合、SQLExecDirect関数でSQL文を直接実行します。
準備後に実行する場合、あらかじめSQLPrepare関数でSQL文を準備しておき、SQLExecute関数で実行します。同じSQL文を繰り返し実行する場合には、準備しておいたSQL文を実行した方がパフォーマンスが向上します。
結果セットの取り出し
SQL文を実行した後、結果セットを取り出します。
SQLの実行結果(列)とアプリケーション・プログラム変数を関連付けるには、SQLBindCol関数でバインドします。
結果セットから1行ずつ行を取り出すには、SQLFetch関数を使用します。
結果セットからまとめて行を取り出すには、SQLExtendedFetch関数を使用します。
トランザクション制御
ODBCの仕様では、デフォルトで自動コミットが有効になっています。自動コミットのON/OFFを切り替えるには、SQLSetConnectOption関数を使用します。
自動コミットが有効な場合、SQL文を実行するたびに自動的にコミットが行われます。したがって、明示的にコミットを行う必要はありませんが、ロールバックすることができません。
自動コミットが無効な場合、コミットおよびロールバックを明示的に行うことができます。ODBCでは、COMMITやROLLBACKなどのSQL文でトランザクション制御は行いません。トランザクション制御はSQLTransact関数で行います。
エラー処理
ODBC関数呼び出しの戻り値が SQL_ERROR または SQL_SUCCESS_WITH_INFO だった場合、診断情報が生成されます。次のODBC関数を呼び出すことにより、診断情報を取得することができます。
- SQLError (ODBCバージョン3より前)
- SQLGetDiagRec (ODBCバージョン3以降)
ただし、これらの関数自体が診断情報を生成することはありません。
データベースとの切断
データベースとの切断を行うには、SQLDisconnect関数を使用します。
データベースとの接続を確立する関数には、SQLConnectとSQLDriverConnectの2種類ありますが、どちらを使用して接続した場合でもSQLDisconnect関数で切断することができます。
ハンドルの解放
次のODBC関数を呼び出すことにより、ハンドルを解放することができます。
- SQLFreeStmt, SQLFreeConnect, SQLFreeEnv (ODBCバージョン3より前)
- SQLFreeHandle (ODBCバージョン3以降)
ODBCバージョン3より前のバージョンでは、SQLFreeConnect関数やSQLFreeEnv関数のように、解放するハンドルの種類ごとに関数が分かれていましたが、ODBCバージョン3からSQLFreeHandle関数に統一されました。
SQLAllocHandle
SQLAllocHandle関数は、ハンドルを割り付けるODBC関数です。
構文
SQLRETURN SQLAllocHandle(SQLSMALLINT iType
SQLINTEGER hParent,
SQLINTEGER *pHandle);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| iType | SQLSMALLINT | 入力 | 割り付けるハンドルの種類 |
| hParent | SQLINTEGER | 入力 | 親項目のハンドル |
| pHandle | SQLINTEGER * | 出力 | ハンドルを格納する領域へのポインタ |
引数iTypeには、割り付けるハンドルの種類を示す識別子を指定します。指定できる識別子は、次のとおりです。
| 識別子 | ハンドルの種類 |
|---|---|
| SQL_HANDLE_ENV | 環境ハンドル |
| SQL_HANDLE_DBC | 接続ハンドル |
| SQL_HANDLE_STMT | ステートメント・ハンドル |
| SQL_HANDLE_DESC | 記述子ハンドル |
引数hParentには、割り付けるハンドルの親項目のハンドルを指定します。割り当てるハンドルの種類と親項目のハンドルとの関係は、次のとおりです。
| 割り当てるハンドルの種類 | 親項目のハンドル |
|---|---|
| 環境ハンドル | 無し (SQL_NULL_HANDLE) |
| 接続ハンドル | 環境ハンドル |
| ステートメント・ハンドル | 接続ハンドル |
環境ハンドルには親項目が存在しませんので、SQL_NULL_HANDLEを指定します。
引数pHandleはプレースホルダです。実際にはSQLINTEGER型のポインタではなく、割り当てるハンドルに応じた型のポインタを指定します。ODBCプログラムに必要なハンドルの型は、次のとおりです。
| 項目 | ハンドルの型 |
|---|---|
| 環境 | SQLHENV |
| 接続 | SQLHDBC |
| ステートメント | SQLHSTMT |
| 記述子 | SQLHDESC |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
SQLAllocEnv
SQLAllocEnv関数は、環境ハンドルと関連するリソースを割り当てるODBC関数です。
ODBCバージョン3からは、SQLAllocHandle関数に置き換えられました。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| phenv | SQLHENV * | 出力 | 環境ハンドルへのポインタ |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
SQLAllocConnect
SQLAllocConnect関数は、接続ハンドルと関連するリソースを割り当てるODBC関数です。SQLAllocConnect関数を呼び出す前に、SQLAllocEnv関数を呼び出して環境ハンドルを割り当てる必要があります。
ODBCバージョン3からは、SQLAllocHandle関数に置き換えられました。
構文
SQLRETURN SQLAllocConnect(SQLHENV henv,
SQLHDBC *phdbc);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| henv | SQLHENV | 入力 | 環境ハンドル |
| phdbc | SQLHDBC * | 出力 | 接続ハンドルへのポインタ |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な環境ハンドル
SQLConnect
SQLConnect関数は、データベースへの接続を確立するODBC関数です。SQLConnect関数を呼び出す前に、接続ハンドルを割り当てる必要があります。
構文
SQLRETURN SQLConnect(SQLHDBC hdbc,
SQLCHAR *szDSN,
SQLSMALLINT cbDSN,
SQLCHAR *szUID,
SQLSMALLINT cbUID,
SQLCHAR *szPsw,
SQLSMALLINT cbPsw);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| szDSN | SQLCHAR * | 入力 | データソース名へのポインタ |
| cbDSN | SQLSMALLINT | 入力 | データソース名の長さ |
| szUID | SQLCHAR * | 入力 | ユーザーIDへのポインタ |
| cbUID | SQLSMALLINT | 入力 | ユーザーIDの長さ |
| szPsw | SQLCHAR * | 入力 | パスワードへのポインタ |
| cbPsw | SQLSMALLINT | 入力 | パスワードの長さ |
文字列を渡す引数 (szDSN, szUID, szPsw) がNULLで終了している場合、文字列の長さを表す引数 (cbDSN, cbUID, cbPsw) には、文字列がNULLで終わっていることを表す SQL_NTS を指定することができます。
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な接続ハンドル
SQLDriverConnect
SQLDriverConnect関数は、データベースへの接続を確立するODBC関数で、SQLConnectの代替関数です。
構文
SQLRETURN SQLDriverConnect(SQLHDBC hdbc,
SQLHWND hWindow,
SQLCHAR *szConnStr,
SQLSMALLINT cbConnnStr,
SQLCHAR *szConnOut,
SQLSMALLINT cbConnOutMax,
SQLSMALLINT *pcbConnOut,
SQLSMALLINT fDriverConpletion);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| hWindow | SQLHWND | 入力 | ウィンドウ・ハンドル(プラットフォーム依存) |
| szConnStr | SQLCHAR * | 入力 | 接続文字列 |
| cbConnnStr | SQLSMALLINT | 入力 | 接続文字列の長さ |
| szConnOut | SQLCHAR * | 出力 | 完了接続文字列を格納するバッファへのポインタ |
| cbConnOutMax | SQLSMALLINT | 入力 | 完了接続文字列を格納するバッファの最大サイズ |
| pcbConnOut | SQLSMALLINT * | 入力 | 完了接続文字列のサイズ |
| fDriverConpletion | SQLSMALLINT | 入力 | ユーザーにプロンプトで要求すればよいか |
引数szConnStrには接続文字列を指定します。接続文字列は「属性=値」の形式で属性を指定した文字列です。セミコロン記号で区切ることにより、複数の属性を列挙することができます。属性には次のようなものがあります(プラットフォームに依存)。
| 属性 | 説明 |
|---|---|
| DSN | データ・ソース名 |
| UID | ユーザーID |
| PWD | ユーザーIDに対応したパスワード |
データ・ソースへの接続に成功すると、引数szConnOutで指定したバッファに、完了した接続文字列が格納されます。
引数fDriverConpletionに指定できる識別子を次に示します。
- SQL_DRIVER_COMPLETE
- SQL_DRIVER_COMPLETE_REQUIRED
- SQL_DRIVER_NOPROMPT
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な接続ハンドル
- SQL_NO_DATA_FOUND
- データが無い
使用例
SQLRETURN rc;
SQLHDBC hDbc;
SQLCHAR szConnStr[] = "DSN=SalesDB;UID=scott;PWD=tiger;";
SQLCHAR szConnOut[255];
SQLSMALLINT cbConnOut;
rc = SQLDriverConnect(hDbc,
NULL
szConnStr,
SQL_NTS,
szConnOut,
255,
&cbConnOut,
SQL_DRIVER_NOPROMPT);
SQLAllocStmt
SQLAllocStmt()は新規のステートメント・ハンドルを割り当て、このハンドルを接続ハンドルで指定した接続に関連付けます。SQLAllocStmt()を呼び出す前にSQLConnect()を呼び出す必要があります。
ODBCバージョン3からは、SQLAllocHandle関数に置き換えられました。
構文
SQLRETURN SQLAllocStmt(SQLHDBC hdbc,
SQLHSTMT *phstmt);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| phstmt | SQLHSTMT * | 出力 | ステートメント・ハンドルへのポインタ |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な接続ハンドル
SQLExecDirect
SQLExecDirect関数は、指定されたSQLステートメントを直接実行するODBC関数です。
構文
SQLRETURN SQLExecDirect(SQLHSTMT hstmt,
SQLCHAR szSqlStr,
SQLINTEGER cbSqlStr);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドル |
| szSqlStr | SQLCHAR * | 入力 | SQLステートメント文字列へのポインタ |
| cbSqlStr | SQLSMALLINT | 入力 | SQLステートメント文字列の長さ |
文字列を渡す引数 (szSqlStr) がNULLで終了している場合、文字列の長さを表す引数 (cbSqlStr) には、文字列がNULLで終わっていることを表す SQL_NTS を指定することができます。
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
- SQL_NO_DATA_FOUND
- SQL文の検索条件に合う行が無い
SQLPrepare
SQLPrepare関数は、SQL文を準備するODBC関数です。準備したSQL文は、SQLExecute関数で実行することができます。
構文
SQLRETURN SQLPrepare(SQLHSTMT hstmt,
SQLCHAR szSqlStr,
SQLINTEGER cbSqlStr);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドル |
| szSqlStr | SQLCHAR * | 入力 | SQLステートメント文字列へのポインタ |
| cbSqlStr | SQLSMALLINT | 入力 | SQLステートメント文字列の長さ |
文字列を渡す引数 (szSqlStr) がNULLで終了している場合、文字列の長さを表す引数 (cbSqlStr) には、文字列がNULLで終わっていることを表す SQL_NTS を指定することができます。
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
SQLSetConnectOption
SQLSetConnectOption関数は、接続オプションを指定するODBC関数です。
構文
SQLRETURN SQLSetConnectOption(SQLHDBC hdbc,
SQLSMALLINT fOption,
SQLPOINTER pvParam);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| fOption | SQLSMALLINT | 入力 | 接続オプション |
| pvParam | SQLPOINTER | 入力 | 接続オプションに設定する値 |
引数fOptionには、次の値を指定することができます。
| fOption | 意味 |
|---|---|
| SQL_AUTOCOMMIT | 自動コミットのON/OFF ODBCの仕様では、自動コミットはONがデフォルトです。 |
引数pvParamに指定できる値は、引数fOptionによって異なります。
| pvParam | 意味 |
|---|---|
| SQL_AUTOCOMMIT_ON | 自動コミットON |
| SQL_AUTOCOMMIT_OFF | 自動コミットOFF |
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な接続ハンドル
SQLTransact
SQLTransact関数は、接続中の現在のトランザクションをコミットまたはロールバックするODBC関数です。
構文
SQLRETURN SQLTransact(SQLHENV henv,
SQLHDBC hdbc,
SQLSMALLINT fType);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| henv | SQLHENV | 入力 | 環境ハンドル |
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| fType | SQLSMALLINT | 入力 | コミットまたはロールバックの種別 |
引数fTypeには、次の値を指定することができます。
| fType | 意味 |
|---|---|
| SQL_COMMIT | コミット |
| SQL_ROLLBACK | ロールバック |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
SQLExecute
SQLExecute関数は、SQLPrepare関数で準備されたSQL文を実行するODBC関数です。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドル |
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
- SQL_NO_DATA_FOUND
- SQL文の検索条件に合う行が無い
SQLBindCol
SQLBindCol()はアプリケーション・プログラム変数に対して列をバインドします。通常、SQLBindCol()を呼び出す前にSQLExecDirect()を呼び出します。
構文
SQLRETURN SQLBindCol(SQLHSTMT hstmt,
SQLSMALLINT iCol,
SQLSMALLINT fType,
SQLPOINTER pValue,
SQLINTEGER cbValueMax,
SQLLEN *pcbValue);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドル |
| iCol | SQLSMALLINT | 入力 | 列番号(左から右へ順番に1から番号が付けられている) |
| fType | SQLSMALLINT | 入力 | アプリケーション・データ・タイプ |
| pValue | SQLPOINTER | 出力 | 列データが保管されるバッファへのポインタ |
| cbValueMax | SQLINTEGER | 入力 | 列データの保管に必要なバッファの最大サイズ(バイト単位) |
| pcbValue | SQLLEN * | 出力 | 列データのサイズを格納する領域へのポインタ |
引数fTypeには次のうちいずれかを指定することができます。
- SQL_CHAR
- SQL_VARCHAR
- SQL_NUMERIC
- SQL_DECIMAL
- SQL_INTEGER
- SQL_SMALLINT
- SQL_BIGINT
- SQL_FLOAT
- SQL_REAL
- SQL_DOUBLE
- SQL_DATATIME
- SQL_TYPE_DATE
- SQL_TYPE_TIME
- SQL_TYPE_TIMESTAMP
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
SQLFetch
SQLFetch()は結果セットの次の行にカーソルを進め、バインド列を更新します。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドルへのポインタ |
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
- SQL_NO_DATA_FOUND
- 結果セットに行が無いか、結果セットの全ての行の取り出しが完了した
SQLExtendedFetch
SQLExtendedFetch関数は、各バインド列ごとに複数の行が入った行セットを戻すことで、SQLFetch関数の機能を拡張をします。
構文
SQLRETURN SQLExtendedFetch(SQLHSTMT hstmt,
SQLSMALINT fFetchOrientation,
SQLINTEGER FetchOffset,
SQLINTEGER *pRowCount,
SQLSMALLINT *RowStatusArray);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドルへのポインタ |
| fFetchOrientation | SQLSMALINT | 入力 | 取り出しの方向 |
| FetchOffset | SQLINTEGER | 入力 | 未使用(予約済み) |
| pRowCount | SQLINTEGER * | 出力 | 取り出した行数を格納する領域へのポインタ |
| RowStatusArray | SQLSMALLINT * | 出力 | 状況値の配列 |
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
- SQL_NO_DATA_FOUND
- 結果セットに行が無い
SQLFreeStmt
SQLFreeStmt()はステートメント・ハンドルを解放します。SQLFreeStmt()を呼び出す前にSQLAllocStmt()を呼び出す必要があります。
構文
SQLRETURN SQLFreeStmt(SQLHSTMT hstmt,
SQLSMALLINT fOption);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドルへのポインタ |
| fOption | SQLSMALLINT | 入力 | オプション |
引数fOptionには次のうちいずれかを指定することができます。
- SQL_CLOSE
- ステートメント・ハンドルをクローズして、保留中の結果は破棄する。
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なステートメント・ハンドル
SQLDisconnect
SQLCisconnect()は接続ハンドルと関連する接続をクローズします。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
戻り値
- SQL_SUCCESS
- 成功
- SQL_SUCCESS_WITH_INFO
- 成功(警告あり)
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効な接続ハンドル
SQLFreeHandle
SQLFreeHandle関数は、SQLAllocHandle関数で割り付けたハンドルを解放するODBC関数です。
構文
SQLRETURN SQLFreeHandle(SQLSMALLINT iType,
SQLINTEGER iHandle);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| iType | SQLSMALLINT | 入力 | 解放するハンドルの種類 |
| iHandle | SQLINTEGER | 入力 | 解放するハンドル |
引数iTypeには、解放するハンドルの種類を示す識別子を指定します。指定できる識別子は、次のとおりです。
| 識別子 | ハンドルの種類 |
|---|---|
| SQL_HANDLE_ENV | 環境ハンドル |
| SQL_HANDLE_DBC | 接続ハンドル |
| SQL_HANDLE_STMT | ステートメント・ハンドル |
| SQL_HANDLE_DESC | 記述子ハンドル |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
SQLFreeConnect
SQLFreeConnect関数は、SQLAllocConnect関数で割り付けた接続ハンドルを解放するODBC関数です。
ODBCバージョン3からは、SQLFreeHandle関数に置き換えられました。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| hdbc | SQLHDBC | 入力 | 解放する接続ハンドル |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
SQLFreeEnv
SQLFreeEnv関数は、SQLAllocEnv関数で割り付けた環境ハンドルを解放するODBC関数です。
ODBCバージョン3からは、SQLFreeHandle関数に置き換えられました。
構文
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| henv | SQLHENV | 入力 | 解放する環境ハンドル |
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
SQLGetDiagRec
SQLGetDiagRec関数は、診断情報を取得します。他のODBC関数呼び出しの戻り値がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOだったときに、診断情報を取得できます。
構文
SQLRETURN SQLGetDiagRec(SQLSMALLINT iType,
SQLINTEGER handle,
SQLSMALLINT recNum,
SQLCHAR *szSqlState,
SQLINTEGER *pfNativeError,
SQLCHAR *szErrorMsg,
SQLSMALLINT cbErroMsgMax,
SQLSMALLINT *pcbErrorMsg);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| iType | SQLSMALLINT | 入力 | ハンドルの種類 |
| handle | SQLINTEGER | 入力 | 診断情報が必要なハンドル |
| recNum | SQLSMALLINT | 入力 | エラー・レコード番号(最初が1) |
| szSqlState | SQLCHAR * | 出力 | 状態値 |
| pfNativeError | SQLINTEGER * | 出力 | 元のエラー・コード |
| szErrorMsg | SQLCHAR * | 出力 | メッセージ文字列を格納する領域へのポインタ |
| cbErrorMsgMax | SQLSQMLLINT | 入力 | メッセージ文字列を格納する領域の最大サイズ。 |
| pcbErrorMsg | SQLSQMLLINT * | 出力 | メッセージ文字列のバイト数 |
引数iTypeには、診断情報を取得するハンドルの種類を示す識別子を指定します。指定できる識別子は、次のとおりです。
| 識別子 | ハンドルの種類 |
|---|---|
| SQL_HANDLE_ENV | 環境ハンドル |
| SQL_HANDLE_DBC | 接続ハンドル |
| SQL_HANDLE_STMT | ステートメント・ハンドル |
| SQL_HANDLE_DESC | 記述子ハンドル |
引数cbErrorMsgMaxにSQL_MAX_MESSAGE_LENGTH + 1 より小さい値を指定したときは、エラー・メッセージが途中で切り捨てられる場合があります。
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
- SQL_NO_DATA_FOUND
- エラー無し
SQLError
SQLError関数は、診断情報を取得します。他の関数呼び出しの戻り値がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOだったときに、情報を取得できます。
ODBCバージョン3からは、SQLGetDiagRec関数に置き換えられました。
構文
SQLRETURN SQLError(SQLHENV henv,
SQLHDBC hdbc,
SQLHSTMT hstmt,
SQLCHAR *szSqlState,
SQLINTEGER *pfNativeError,
SQLCHAR *szErrorMsg,
SQLSMALLINT cbErroMsgMax,
SQLSMALLINT *pcbErrorMsg);
引数
| 引数 | 型 | 入出力 | 説明 |
|---|---|---|---|
| henv | SQLHENV | 入力 | 環境ハンドル |
| hdbc | SQLHDBC | 入力 | 接続ハンドル |
| hstmt | SQLHSTMT | 入力 | ステートメント・ハンドル |
| szSqlState | SQLCHAR * | 出力 | 状態値 |
| pfNativeError | SQLINTEGER * | 出力 | 元のエラー・コード |
| szErrorMsg | SQLCHAR * | 出力 | メッセージ文字列を格納する領域へのポインタ |
| cbErrorMsgMax | SQLSQMLLINT | 入力 | メッセージ文字列を格納する領域の最大サイズ。 |
| pcbErrorMsg | SQLSQMLLINT * | 出力 | メッセージ文字列のバイト数 |
引数cbErrorMsgMaxにSQL_MAX_MESSAGE_LENGTH + 1 より小さい値を指定したときは、エラー・メッセージが途中で切り捨てられる場合があります。
戻り値
- SQL_SUCCESS
- 成功
- SQL_ERROR
- 失敗
- SQL_INVALID_HANDLE
- 無効なハンドル
- SQL_NO_DATA_FOUND
- エラー無し