Partager via


SQLCancelHandle, fonction

conformité
Version introduite : Conformité aux normes ODBC 3.8 : Aucun

Il est prévu que la plupart des pilotes ODBC 3.8 (et versions ultérieures) implémentent cette fonction. Si un pilote ne le fait pas, un appel à SQLCancelHandle avec un handle de connexion dans le paramètre handle Handle retourne SQL_ERROR avec un SQLSTATE de IM001 et le message « Driver ne prend pas en charge cette fonction » A appel à SQLCancelHandle avec un handle d’instruction, car le paramètre handle Handle sera mappé à un appel à SQLCancel par le Gestionnaire de pilotes et peut être traité si le pilote implémente sqlCancel. Une application peut utiliser SQLGetFunctions pour déterminer si un pilote prend en charge SQLCancelHandle.

résumé
SQLCancelHandle annule le traitement sur une connexion ou une instruction. Le Gestionnaire de pilotes mappe un appel à SQLCancelHandle à un appel à SQLCancel lorsque handleType est SQL_HANDLE_STMT.

Syntaxe

  
SQLRETURN SQLCancelHandle(  
      SQLSMALLINT  HandleType,  
      SQLHANDLE    Handle);  

Arguments

HandleType
[Entrée] Type du handle sur lequel annuler le traitement. Les valeurs valides sont SQL_HANDLE_DBC ou SQL_HANDLE_STMT.

Handle
[Entrée] Handle sur lequel annuler le traitement.

Si Handle n’est pas un handle valide du type spécifié par HandleType, SQLCancelHandle retourne SQL_INVALID_HANDLE.

Retourne

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR ou SQL_INVALID_HANDLE.

Diagnostic

Lorsque SQLCancelHandle retourne SQL_ERROR ou SQL_SUCCESS_WITH_INFO, une valeur SQLSTATE associée peut être obtenue en appelant SQLGetDiagRec avec un handle HandleType de SQL_HANDLE_STMT et un handle d’instruction Handle ou un HandleType de SQL_HANDLE_DBC et un handle de connexion Handle.

Le tableau suivant répertorie les valeurs SQLSTATE couramment retournées par SQLCancelHandle et explique chacune d’elles dans le contexte de cette fonction ; la notation « (DM) » précède les descriptions des SQLSTATEs retournées par le Gestionnaire de pilotes. Le code de retour associé à chaque valeur SQLSTATE est SQL_ERROR, sauf indication contraire.

SQLSTATE Erreur Description
01000 Avertissement général Message d’information spécifique au pilote. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
HY000 Erreur générale Une erreur s’est produite pour laquelle il n’y avait aucun SQLSTATE spécifique et pour lequel aucun SQLSTATE spécifique à l’implémentation n’a été défini. Le message d’erreur retourné par SQLGetDiagRec dans l’argument *MessageText tampon décrit l’erreur et sa cause.
HY001 Erreur d’allocation de mémoire Le pilote n’a pas pu allouer de mémoire nécessaire pour prendre en charge l’exécution ou l’achèvement de la fonction.
HY010 Erreur de séquence de fonction Une fonction liée à l’instruction en cours d’exécution asynchrone a été appelée pour l’un des handles d’instruction associés à l'handle , et handleType a été définie sur SQL_HANDLE_DBC. La fonction asynchrone était toujours en cours d’exécution lorsque SQLCancelHandle a été appelée.

(DM) L’argument handleType
était SQL_HANDLE_STMT ; une fonction en cours d’exécution asynchrone a été appelée sur le handle de connexion associé ; et la fonction était toujours en cours d’exécution lorsque cette fonction a été appelée.

(DM) SQLExecute, SQLExecDirect, ou SQLMoreResults a été appelé pour l’un des handles d’instruction associés au handle de handle et HandleType a été défini sur SQL_HANDLE_DBC et retourné SQL_PARAM_DATA_AVAILABLE. Cette fonction a été appelée avant la récupération des données pour tous les paramètres diffusés en continu.

SQLBrowseConnect a été appelé pour ConnectionHandle et a retourné SQL_NEED_DATA. Cette fonction a été appelée avant la fin du processus de navigation.
HY013 Erreur de gestion de la mémoire L’appel de fonction n’a pas pu être traité, car les objets de mémoire sous-jacents n’ont pas pu être accessibles, éventuellement en raison de conditions de mémoire insuffisantes.
HY092 Identificateur d’attribut/d’option non valide handleType a été défini sur SQL_HANDLE_ENV ou SQL_HANDLE_DESC.
HY117 La connexion est suspendue en raison d’un état de transaction inconnu. Seules les fonctions de déconnexion et de lecture seule sont autorisées. (DM) Pour plus d’informations sur l’état suspendu, consultez fonction SQLEndTran.
HYT01 Expiration du délai d’expiration de la connexion La période d’expiration de la connexion a expiré avant que la source de données ne réponde à la demande. La période d’expiration de la connexion est définie via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Le pilote ne prend pas en charge cette fonction (DM) Le pilote associé à la Handle ne prend pas en charge la fonction.

Si SQLCancelHandle est appelé avec HandleType défini sur SQL_HANDLE_STMT, il peut retourner n’importe quel SQLSTATE qui peut être retourné par la fonction SQLCancel.

Commentaires

Cette fonction est similaire à SQLCancel, mais peut prendre un handle de connexion ou d’instruction comme paramètre plutôt qu’un handle d’instruction. Le Gestionnaire de pilotes mappe un appel à SQLCancelHandle à un appel à SQLCancel lorsque handleType est SQL_HANDLE_STMT. Cela permet aux applications d’utiliser SQLCancelHandle pour annuler les opérations d’instruction même si le pilote n’implémente pas SQLCancelHandle.

Pour plus d’informations sur l’annulation d’une opération d’instruction, consultez fonction SQLCancel.

S’il n’existe aucune opération en cours sur Handle l’appel à SQLCancelHandle n’a aucun effet.

SQLCancelHandle sur un handle de connexion peut annuler les types de traitement suivants :

  • Fonction s’exécutant de manière asynchrone sur la connexion.

  • Fonction s’exécutant sur le handle de connexion sur un autre thread.

Lorsque SQLCancelHandle est appelé pour annuler une fonction exécutée de manière asynchrone dans une connexion, les enregistrements de diagnostic publiés par SQLCancelHandle sont ajoutés à ceux retournés par l’opération en cours d’annulation ; SQLCancelHandle ne retourne pas d’enregistrements de diagnostic, toutefois, lors de l’annulation d’une fonction s’exécutant sur une connexion sur un autre thread.

L’utilisation de SQLCancelHandle pour annuler SQLEndTran peut mettre la connexion en état suspendu. Pour plus d’informations sur l’état suspendu, consultez fonction SQLEndTran.

Note

Pour plus d’informations sur l’utilisation de SQLCancelHandle dans une application qui sera déployée sur un système d’exploitation Windows antérieur à Windows 7, consultez matrice de compatibilité.

Si une fonction retourne SQL_STILL_EXECUTING, une application peut appeler SQLCancelHandle pour annuler l’opération. Si la demande d’annulation réussit, SQLCancelHandle retourne SQL_SUCCESS. Cela ne signifie pas que la fonction d’origine a été annulée ; elle indique que la demande d’annulation a été traitée. Le pilote et la source de données déterminent quand ou si l’opération est annulée. L’application doit continuer à appeler la fonction d’origine jusqu’à ce que le code de retour ne soit pas SQL_STILL_EXECUTING. Si la fonction d’origine a été annulée, le code de retour est SQL_ERROR et SQLSTATE HY008 (Opération annulée). Si la fonction d’origine a terminé son traitement normal (n’a pas été annulé), le code de retour est SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO, ou SQL_ERROR et un SQLSTATE autre que HY008 (Opération annulée), si la fonction d’origine a échoué.

Annulation des fonctions en cours d’exécution sur un autre thread

Dans une application multithread, l’application peut annuler une opération qui s’exécute sur un autre thread. Pour annuler l’opération, l’application appelle SQLCancelHandle avec le handle utilisé par la fonction, mais sur un autre thread. Le pilote et le système d’exploitation déterminent la façon dont l’opération est annulée. Le code de retour SQLCancelHandle indique si le pilote a traité la requête, en retournant SQL_SUCCESS ou SQL_ERROR (aucune information de diagnostic n’est retournée). Si le traitement sur la fonction d’origine est annulé, la fonction d’origine retourne SQL_ERROR et SQLSTATE HY008 (Opération annulée).

Si une fonction est exécutée lorsque SQLCancelHandle est appelé sur un autre thread pour annuler la fonction, il est possible que la fonction réussisse et retourne SQL_SUCCESS avant que l’annulation ne prenne effet. Un appel à SQLCancelHandle n’a aucun effet si l’opération s’est terminée avant SQLCancelHandle a pu annuler l’opération.

Pour plus d’informations sur Voir
Annulation d’une fonction exécutée de manière asynchrone sur un handle d’instruction, annulation d’une fonction sur une instruction qui a besoin de données ou annulation d’une fonction s’exécutant sur une instruction sur un autre thread. fonction SQLCancel

Voir aussi

informations de référence sur l’API ODBC
fichiers d’en-tête ODBC
exécution asynchrone (méthode d’interrogation)