SQLDisconnect 関数

準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ISO 92

まとめ
SQLDisconnect は、特定の接続ハンドルに関連付けられている接続を閉じます。

構文

  
SQLRETURN SQLDisconnect(  
     SQLHDBC     ConnectionHandle);  

引数

ConnectionHandle
[入力] 接続ハンドル。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE、またはSQL_STILL_EXECUTING。

診断

SQLDisconnect がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、関連付けられた SQLSTATE 値を取得するには、HandleType が SQL_HANDLE_DBC で、ConnectionHandleハンドルを使用して SQLGetDiagRec を呼び出します。 次の表に、 SQLDisconnect によって一般的に返される SQLSTATE 値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERRORされます。

SQLSTATE エラー 説明
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
01002 切断エラー 切断中にエラーが発生しました。 ただし、切断は成功しました。 (関数はSQL_SUCCESS_WITH_INFOを返します。
08003 接続が開かない (DM) 引数 ConnectionHandle で指定された接続が開いていません。
25000 トランザクション状態が無効 引数 ConnectionHandle で指定された接続で処理中のトランザクションが発生しました。 トランザクションはアクティブなままです。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てることができませんでした。
HY008 操作が取り消されました ConnectionHandle に対して非同期処理が有効にされました。 関数が呼び出され、 SQLCancelHandle 関数 を実行する前に ConnectionHandle で呼び出されました。 その後、 ConnectionHandle で関数が再度呼び出されました。

関数が呼び出され、 SQLCancelHandle の実行が完了する前に、マルチスレッド アプリケーションの別のスレッドから ConnectionHandle で呼び出されました。
HY010 関数シーケンス エラー (DM) 非同期実行関数が ConnectionHandle に関連付けられた StatementHandle に対して呼び出され、 SQLDisconnect が呼び出されたときにはまだ実行されていました。

(DM) 非同期実行関数 (この関数ではなく) が ConnectionHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。

(DM) ConnectionHandle に関連付けられた StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY013 メモリ管理エラー メモリ不足の可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY117 不明なトランザクション状態が原因で接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に接続タイムアウト期間が切れ、接続がまだアクティブです。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) ConnectionHandle に関連付けられているドライバーは、 関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルを使用するたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する以前の非同期操作を完了するために呼び出されていません。 ハンドルの前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、ハンドルで SQLCompleteAsync を呼び出す必要があります。

説明

SQLBrowseConnect がSQL_NEED_DATAを返し、別のリターン コードを返す前に、アプリケーションが SQLDisconnect を呼び出した場合、ドライバーは接続参照プロセスをキャンセルし、接続されていない状態に接続を返します。

接続ハンドルに関連付けられた不完全なトランザクションがある間にアプリケーションが SQLDisconnect を呼び出した場合、ドライバーは SQLSTATE 25000 (無効なトランザクション状態) を返し、トランザクションが変更されず、接続が開かれていることを示します。 不完全なトランザクションは、 SQLEndTran でコミットまたはロールバックされていないトランザクションです。

アプリケーションが接続に関連付けられているすべてのステートメントを解放する前に SQLDisconnect を呼び出した場合、ドライバーはデータ ソースから正常に切断された後、それらのステートメントと、接続で明示的に割り当てられているすべての記述子を解放します。 ただし、接続に関連付けられている 1 つ以上のステートメントがまだ非同期的に実行されている場合、 SQLDisconnect は、SQLSTATE 値 HY010 (関数シーケンス エラー) でSQL_ERRORを返します。 また、接続が中断状態にある場合、または SQLCancelHandle によって SQLDisconnect が正常に取り消された場合、SQLDisconnect は、接続で明示的に割り当てられたすべての関連ステートメントとすべての記述子を解放します。

アプリケーションで SQLDisconnect を使用する方法の詳細については、「 データ ソースまたはドライバーからの切断」を参照してください。

プールされた接続からの切断

共有環境で接続プールが有効になっており、アプリケーションがその環境の接続で SQLDisconnect を呼び出した場合、接続は接続プールに返され、同じ共有環境を使用する他のコンポーネントでも使用できます。

コード例

サンプル ODBC プログラムSQLBrowseConnect 関数、および SQLConnect 関数」を参照してください。

対象 解決方法については、
ハンドルの割り当て SQLAllocHandle 関数
データ ソースに接続する SQLConnect 関数
接続文字列またはダイアログ ボックスを使用したデータ ソースへの接続 SQLDriverConnect 関数
コミットまたはロールバック操作の実行 SQLEndTran 関数
接続ハンドルの解放 SQLFreeConnect 関数

参照

ODBC API リファレンス
ODBC ヘッダー ファイル