SQLFreeHandle 関数
準拠
導入されたバージョン: ODBC 3.0 標準コンプライアンス: ISO 92
の概要
SQLFreeHandle は、特定の環境、接続、ステートメント、または記述子ハンドルに関連付けられているリソースを解放します。
手記
この関数は、ハンドルを解放するためのジェネリック関数です。 ODBC 2.0 関数
構文
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
引数
HandleType
[入力]SQLFreeHandleによって解放されるハンドルの種類。 次のいずれかの値を指定する必要があります。
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN ハンドルは、ドライバー マネージャーとドライバーによってのみ使用されます。 アプリケーションでは、このハンドルの種類を使用しないでください。 SQL_HANDLE_DBC_INFO_TOKENの詳細については、「ODBC ドライバーでの Connection-Pool 認識の開発
ハンドル
[入力]解放するハンドル。
収益
SQL_SUCCESS、SQL_ERROR、またはSQL_INVALID_HANDLE。
SQLFreeHandle
診断
SQLFreeHandle
SQLSTATE | エラー | 形容 |
---|---|---|
HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。 |
HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY010 | 関数シーケンス エラー | (DM) HandleType 引数がSQL_HANDLE_ENVされ、少なくとも 1 つの接続が割り当て済みまたは接続状態でした。 (DM) (DM) HandleType 引数がSQL_HANDLE_DBCされました。 ハンドル を使用して非同期実行関数が呼び出され、この関数が呼び出されたときに関数がまだ実行されていました。 (DM) HandleType 引数がSQL_HANDLE_STMTされました。 SQLExecute、SQLExecDirect (DM) HandleType 引数がSQL_HANDLE_STMTされました。 非同期実行関数がステートメント ハンドルまたは関連する接続ハンドルで呼び出され、この関数が呼び出されたときに関数がまだ実行されていました。 (DM) HandleType 引数がSQL_HANDLE_DESCされました。 関連付けられた接続ハンドルで非同期実行関数が呼び出されました。この関数が呼び出されたとき、関数はまだ実行されていました。 (DM) SQLFreeHandle (DM) SQLExecute、SQLExecDirect、または SQLMoreResults は、ハンドル に関連付けられたステートメント ハンドルの 1 つに対して呼び出され、HandleType がSQL_HANDLE_STMTに設定されているか、SQL_HANDLE_DESC返SQL_PARAM_DATA_AVAILABLE。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 |
HY013 | メモリ管理エラー | HandleType 引数はSQL_HANDLE_STMTまたはSQL_HANDLE_DESCであり、基になるメモリ オブジェクトにアクセスできなかったため、メモリ不足の可能性があるため、関数呼び出しを処理できませんでした。 |
HY017 | 自動的に割り当てられた記述子ハンドルの使用が無効です。 | (DM) Handle 引数が、自動的に割り当てられた記述子のハンドルに設定されました。 |
HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、SQLEndTran 関数 |
HYT01 | 接続タイムアウトの有効期限が切れた | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQLSetConnectAttr(SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。 |
IM001 | ドライバーは、この関数をサポートしていません | (DM) HandleType 引数がSQL_HANDLE_DESCされ、ドライバーが ODBC 2*.x* ドライバーでした。 (DM) HandleType 引数がSQL_HANDLE_STMTされ、ドライバーが有効な ODBC ドライバーではありません。 |
コメント
SQLFreeHandle は、次のセクションで説明するように、環境、接続、ステートメント、および記述子のハンドルを解放するために使用されます。 ハンドルに関する一般的な情報については、「ハンドルの」を参照してください。
アプリケーションは、解放された後にハンドルを使用しないでください。ドライバー マネージャーは、関数呼び出しのハンドルの有効性を確認しません。
環境ハンドルの解放
環境が共有環境の場合、SQL_HANDLE_ENVの HandleTypeSQLFreeHandle を呼び出すアプリケーションは、呼び出し後に環境にアクセスできなくなりますが、環境のリソースは必ずしも解放されません。 SQLFreeHandle
接続ハンドルの解放
SQL_HANDLE_DBCの
詳細については、「接続ハンドルの と データ ソースまたはドライバーからの切断」を参照してください。
ステートメント ハンドルの解放
SQL_HANDLE_STMTの
SQLDisconnect
記述子ハンドルの解放
SQL_HANDLE_DESCの
手記
ODBC 2*.x* ドライバーは、記述子ハンドルの割り当てをサポートしていないのと同様に、記述子ハンドルの解放をサポートしていません。
SQLDisconnect
記述子の詳細については、「記述子の」を参照してください。
コード例
その他のコード サンプルについては、SQLBrowseConnect と SQLConnectの
コード
// SQLFreeHandle.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
#include <stdio.h>
int main() {
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
// Initialize the environment, connection, statement handles.
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
// Allocate the environment.
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set environment attributes.
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
// Allocate the connection.
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// Set the login timeout.
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
// Let the user select the data source and connect to the database.
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR *)"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Free handles, and disconnect.
if (hstmt) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
hstmt = NULL;
}
if (hdbc) {
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
hdbc = NULL;
}
if (henv) {
SQLFreeHandle(SQL_HANDLE_ENV, henv);
henv = NULL;
}
}
関連関数
詳細については、次の情報を参照してください。 | 見る |
---|---|
ハンドルの割り当て | SQLAllocHandle 関数 の |
ステートメント処理の取り消し | SQLCancel 関数の |
カーソル名の設定 | SQLSetCursorName 関数 の |
関連項目
ODBC API リファレンス
ODBC ヘッダー ファイル の
サンプル ODBC プログラムの