次の方法で共有


SQLCancelHandle 関数

準拠
導入されたバージョン: ODBC 3.8 標準準拠: なし

ほとんどの ODBC 3.8 (以降) ドライバーでは、この関数が実装されることが想定されています。 ドライバーがそうでない場合は、次の処理を行います。 Handle パラメーターの接続ハンドルを使用して SQLCancelHandle を 呼び出すと、SQLSTATE が IM001 でSQL_ERRORが返され、メッセージ 'Driver does not support this function'' への呼び出し ハンドル パラメーターとしてステートメント ハンドルを持つ SQLCancelHandle は、ドライバー マネージャーによって SQLCancel 呼び出しにマップされ、ドライバーが処理できますは、SQLCancel実装します。 アプリケーションは、SQLGetFunctions を使用して、ドライバーが SQLCancelHandleサポートしているかどうかを判断できます。

の概要
SQLCancelHandle は、接続またはステートメントの処理を取り消します。 ドライバー マネージャーは、HandleType がSQL_HANDLE_STMTされている場合に、SQLCancelHandle への呼び出し SQLCancel の呼び出しにマップします。

構文

  
SQLRETURN SQLCancelHandle(  
      SQLSMALLINT  HandleType,  
      SQLHANDLE    Handle);  

引数

HandleType
[入力]処理を取り消すハンドルの型。 有効な値は、SQL_HANDLE_DBCまたはSQL_HANDLE_STMTです。

ハンドル
[入力]処理を取り消すハンドル。

Handle が、HandleTypeで指定された型の有効なハンドルでない場合、SQLCancelHandle SQL_INVALID_HANDLEを返します。

収益

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

SQLCancelHandle がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、関連付けられた SQLSTATE 値は、HandleType SQL_HANDLE_STMTとステートメント ハンドル ハンドル またはSQL_HANDLE_DBCの Handle Type ハンドル ハンドルを使用して呼び出すことによって、関連付けられた SQLSTATE 値を取得できます。

次の表に、SQLCancelHandle によって一般的に返される SQLSTATE 値を示し、この関数のコンテキストでそれぞれについて説明します。"(DM)" という表記は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。

SQLSTATE エラー 形容
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファーの引数 SQLGetDiagRec によって返されるエラー メッセージ エラーとその原因について説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY010 関数シーケンス エラー Handleに関連付けられているステートメント ハンドルの 1 つに対して非同期に実行されるステートメント関連の関数が呼び出され、HandleType SQL_HANDLE_DBCに設定されました。 SQLCancelHandle が呼び出されたとき、非同期関数は引き続き実行されていました。

(DM) HandleType 引数がSQL_HANDLE_STMTされました。関連付けられた接続ハンドルで非同期実行関数が呼び出されました。この関数が呼び出されたとき、関数はまだ実行されていました。

(DM) SQLExecuteSQLExecDirect、または SQLMoreResults は、ハンドル に関連付けられているステートメント ハンドルの 1 つについて呼び出され、HandleType がSQL_HANDLE_DBCに設定され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。

SQLBrowseConnect は、ConnectionHandleに対して呼び出され、SQL_NEED_DATA返されました。 この関数は、参照プロセスが完了する前に呼び出されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY092 無効な属性/オプション識別子 HandleType が SQL_HANDLE_ENV または SQL_HANDLE_DESC に設定されました。
HY117 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、SQLEndTran 関数を参照してください。
HYT01 接続タイムアウトの有効期限が切れた データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQLSetConnectAttr(SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) ハンドル に関連付けられているドライバーは、関数をサポートしていません。

HandleType を SQL_HANDLE_STMT に設定して SQLCancelHandle 呼び出した場合は、SQLCancel関数から返すことができる任意の SQLSTATE を返すことができます。

コメント

この関数は SQLCancel 似ていますが、ステートメント ハンドルだけでなく、接続ハンドルまたはステートメント ハンドルをパラメーターとして受け取ることができます。 ドライバー マネージャーは、HandleType がSQL_HANDLE_STMTされている場合に、SQLCancelHandle への呼び出し SQLCancel の呼び出しにマップします。 これにより、SQLCancelHandle 使用して、ドライバーが SQLCancelHandle実装していない場合でも、ステートメント操作を取り消すことができます。

ステートメント操作の取り消しの詳細については、SQLCancel 関数 を参照してください。

Handle で進行中の操作がない場合、SQLCancelHandle の呼び出し 影響はありません。

接続ハンドル SQLCancelHandle は、次の種類の処理を取り消すことができます。

  • 接続で非同期的に実行されている関数。

  • 別のスレッドの接続ハンドルで実行されている関数。

接続 非同期的に実行されている関数を取り消すために SQLCancelHandle が呼び出されると、SQLCancelHandle によってポストされた診断レコードが、取り消される操作によって返された診断レコードに追加されます。SQLCancelHandle は診断レコードを返しませんが、別のスレッド上の接続で実行されている関数を取り消すときに返されます。

SQLCancelHandle を使用して SQLEndTran キャンセルすると、接続が中断状態になる可能性があります。 中断状態の詳細については、SQLEndTran 関数を参照してください。

手記

Windows 7 より古い Windows オペレーティング システムに展開されるアプリケーションで SQLCancelHandle 使用する方法については、「互換性マトリックスの」を参照してください。

関数がSQL_STILL_EXECUTINGを返す場合、アプリケーションは SQLCancelHandle 呼び出して操作を取り消すことができます。 キャンセル要求が成功した場合、SQLCancelHandle はSQL_SUCCESSを返します。 これは、元の関数が取り消されたことを意味するものではありません。これは、取り消し要求が処理されたことを示します。 ドライバーとデータ ソースは、操作が取り消されたタイミングとタイミングを決定します。 戻りコードがSQL_STILL_EXECUTINGされないまで、アプリケーションは元の関数を引き続き呼び出す必要があります。 元の関数が取り消された場合、戻りコードはSQL_ERRORされ、SQLSTATE HY008 (操作は取り消されました) になります。 元の関数が通常の処理を完了した (取り消されなかった) 場合、元の関数が失敗した場合、戻りコードはSQL_SUCCESSまたはSQL_SUCCESS_WITH_INFO、またはSQL_ERRORおよび HY008 以外の SQLSTATE (Operation canceled) になります。

別のスレッドで実行されている関数の取り消し

マルチスレッド アプリケーションでは、アプリケーションは別のスレッドで実行されている操作を取り消すことができます。 操作を取り消すために、アプリケーションは、関数によって使用されるハンドル 別のスレッドで SQLCancelHandle を呼び出します。 操作の取り消し方法は、ドライバーとオペレーティング システムによって決まります。 SQLCancelHandle リターン コードは、ドライバーが要求を処理したか、SQL_SUCCESSまたはSQL_ERRORを返したかを示します (診断情報は返されません)。 元の関数の処理が取り消された場合、元の関数は SQL_ERROR および SQLSTATE HY008 (操作が取り消されました) を返します。

別のスレッドで SQLCancelHandle 呼び出して関数を取り消すときに関数が実行されている場合は、その関数が成功し、SQL_SUCCESSを返してから取り消しを有効にすることができます。 SQLCancelHandle の呼び出しは、SQLCancelHandle が操作を取り消す前に操作 完了した場合には影響しません。

詳細については、次の情報を参照してください。 見る
ステートメント ハンドルで非同期的に実行されている関数の取り消し、データが必要なステートメントの関数の取り消し、または別のスレッドのステートメントで実行されている関数の取り消し。 SQLCancel 関数の

関連項目

ODBC API リファレンス
ODBC ヘッダー ファイル の
非同期実行 (ポーリング メソッド)