SQLExecute, fonction

Conformité
Version introduite : Conformité aux normes ODBC 1.0 : ISO 92

Résumé
SQLExecute exécute une instruction préparée, en utilisant les valeurs actuelles des variables de marqueur de paramètre si des marqueurs de paramètre existent dans l’instruction.

Syntaxe

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

Arguments

StatementHandle
[Entrée] Handle d’instruction.

Retours

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE ou SQL_PARAM_DATA_AVAILABLE.

Diagnostics

Lorsque SQLExecute retourne SQL_ERROR ou SQL_SUCCESS_WITH_INFO, une valeur SQLSTATE associée peut être obtenue en appelant SQLGetDiagRec avec un HandleType de SQL_HANDLE_STMT et un Handle of StatementHandle. Le tableau suivant répertorie les valeurs SQLSTATE couramment retournées par SQLExecute 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.)
01001 Conflit d’opérations de curseur L’instruction préparée associée à StatementHandle contenait une instruction de mise à jour ou de suppression positionnée, et aucune ligne ou plusieurs lignes n’ont été mises à jour ou supprimées. (Pour plus d’informations sur les mises à jour de plusieurs lignes, consultez la description du SQL_ATTR_SIMULATE_CURSOR Attribut dans SQLSetStmtAttr.)

(La fonction retourne SQL_SUCCESS_WITH_INFO.)
01003 Valeur NULL éliminée dans la fonction set L’instruction préparée associée à StatementHandle contenait une fonction set (par exemple AVG, MAX, MIN, etc.), mais pas la fonction count set et les valeurs d’argument NULL ont été supprimées avant l’application de la fonction. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
01004 Données de chaîne, tronquées à droite Les données de type chaîne ou binaire retournées pour un paramètre de sortie ont entraîné la troncation des données binaires non vides ou non NULL. S’il s’agissait d’une valeur de chaîne, elle était tronquée à droite. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
01006 Privilège non révoqué L’instruction préparée associée à l’instruction StatementHandle était une instruction REVOKE et l’utilisateur n’avait pas le privilège spécifié. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
01007 Privilège non accordé L’instruction préparée associée à l’instruction StatementHandle était une instruction GRANT , et l’utilisateur n’a pas pu accorder le privilège spécifié.
01S02 Valeur d’option modifiée Un attribut d’instruction spécifié n’était pas valide en raison de conditions de travail d’implémentation. Par conséquent, une valeur similaire a été temporairement remplacée. (SQLGetStmtAttr peut être appelé pour déterminer la valeur temporairement substituée.) La valeur de remplacement est valide pour l’InstructionHandle jusqu’à ce que le curseur soit fermé, auquel point l’attribut d’instruction revient à sa valeur précédente. Les attributs d’instruction qui peuvent être modifiés sont les suivants : SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT et SQL_ATTR_SIMULATE_CURSOR. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
01S07 Troncation fractionnelle Les données retournées pour un paramètre d’entrée/sortie ou de sortie ont été tronquées de sorte que la partie fractionnaire d’un type de données numérique a été tronquée ou la partie fractionnaire du composant de temps d’une heure, d’un horodatage ou d’un type de données d’intervalle a été tronquée.

(La fonction retourne SQL_SUCCESS_WITH_INFO.)
07002 Champ COUNT incorrect Le nombre de paramètres spécifiés dans SQLBindParameter était inférieur au nombre de paramètres de l’instruction SQL contenue dans *StatementText.

SQLBindParameter a été appelé avec ParameterValuePtr défini sur un pointeur Null, StrLen_or_IndPtr pas défini sur SQL_NULL_DATA ou SQL_DATA_AT_EXEC, et InputOutputType n’a pas la valeur SQL_PARAM_OUTPUT, de sorte que le nombre de paramètres spécifiés dans SQLBindParameter était supérieur au nombre de paramètres de l’instruction SQL contenue dans *StatementText.
07006 Violation d’attribut de type de données restreint La valeur de données identifiée par l’argument ValueType dans SQLBindParameter pour le paramètre lié n’a pas pu être convertie en type de données identifié par l’argument ParameterType dans SQLBindParameter.

La valeur de données retournée pour un paramètre lié comme SQL_PARAM_INPUT_OUTPUT ou SQL_PARAM_OUTPUT n’a pas pu être convertie en type de données identifié par l’argument ValueType dans SQLBindParameter.

(Si les valeurs de données d’une ou plusieurs lignes n’ont pas pu être converties, mais qu’une ou plusieurs lignes ont été retournées avec succès, cette fonction retourne SQL_SUCCESS_WITH_INFO.)
07007 Violation de valeur de paramètre restreinte Le type de paramètre SQL_PARAM_INPUT_OUTPUT_STREAM est utilisé uniquement pour un paramètre qui envoie et reçoit des données en parties. Une mémoire tampon liée à l’entrée n’est pas autorisée pour ce type de paramètre.

Cette erreur se produit lorsque le type de paramètre est SQL_PARAM_INPUT_OUTPUT et lorsque le *StrLen_or_IndPtr spécifié dans SQLBindParameter n’est pas égal à SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) ou SQL_DATA_AT_EXEC.
07S01 Utilisation non valide du paramètre par défaut Une valeur de paramètre, définie avec SQLBindParameter, était SQL_DEFAULT_PARAM et le paramètre correspondant n’était pas un paramètre pour un appel de procédure canonique ODBC.
08S01 Échec du lien de communication Le lien de communication entre le pilote et la source de données à laquelle le pilote a été connecté a échoué avant l’achèvement du traitement de la fonction.
21S02 Le degré de table dérivée ne correspond pas à la liste des colonnes L’instruction préparée associée à l’instruction StatementHandle contenait une instruction CREATE VIEW et la liste de colonnes non qualifiées (le nombre de colonnes spécifiées pour l’affichage dans les arguments d’identificateur de colonne de l’instruction SQL) contenait plus de noms que le nombre de colonnes de la table dérivée définie par l’argument de spécification de requête de l’instruction SQL.
22001 Données de chaîne, troncation droite L’affectation d’un caractère ou d’une valeur binaire à une colonne a entraîné la troncation de caractères non vides (caractères) ou de caractères non null (binaires) ou d’octets.
22002 Variable d’indicateur requise, mais non fournie Les données NULL étaient liées à un paramètre de sortie dont le StrLen_or_IndPtr défini par SQLBindParameter était un pointeur Null.
22003 Valeur numérique hors plage L’instruction préparée associée à l’instruction StatementHandle contenait un paramètre numérique lié, et la valeur du paramètre provoquait la partie entière (par opposition à la fraction) du nombre à tronquer lorsqu’elle est affectée à la colonne de table associée.

Le renvoi d’une valeur numérique (en tant que numérique ou chaîne) pour un ou plusieurs paramètres d’entrée/sortie ou de sortie aurait provoqué la troncation de l’ensemble (par opposition à la fraction) du nombre.
22007 Format datetime non valide L’instruction préparée associée à l’instruction StatementHandle contenait une instruction SQL qui contenait une structure de date, d’heure ou d’horodatage comme paramètre lié, et le paramètre était, respectivement, une date, une heure ou un horodatage non valides.

Un paramètre d’entrée/sortie ou de sortie était lié à une structure C de date, d’heure ou d’horodatage, et une valeur dans le paramètre retourné était, respectivement, une date, une heure ou un horodatage non valide. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
22008 Dépassement de champ Datetime L’instruction préparée associée à StatementHandle contenait une instruction SQL qui contenait une expression datetime qui, lorsqu’elle était calculée, entrait une structure de date, d’heure ou d’horodatage non valide.

Une expression datetime calculée pour un paramètre d’entrée/sortie ou de sortie a entraîné une structure C de date, d’heure ou d’horodatage C non valide.
22012 Division par zéro L’instruction préparée associée à StatementHandle contenait une expression arithmétique qui entraînait la division par zéro.

Une expression arithmétique calculée pour un paramètre d’entrée/sortie ou de sortie a entraîné la division par zéro.
22015 Dépassement de champ d’intervalle *StatementText contenait un paramètre numérique ou d’intervalle exact qui, lorsqu’il est converti en type de données SQL d’intervalle, a provoqué une perte de chiffres significatifs.

*StatementText contenait un paramètre d’intervalle avec plusieurs champs qui, lorsqu’ils étaient convertis en type de données numérique dans une colonne, n’avaient aucune représentation dans le type de données numérique.

*StatementText contenait des données de paramètre affectées à un type SQL d’intervalle, et il n’y avait aucune représentation de la valeur du type C dans le type SQL d’intervalle.

L’affectation d’un paramètre d’entrée/sortie ou de sortie qui était un type SQL numérique ou d’intervalle exact à un type C d’intervalle a provoqué une perte de chiffres significatifs.

Lorsqu’un paramètre d’entrée/sortie ou de sortie a été affecté à une structure C d’intervalle, il n’y avait aucune représentation des données dans la structure de données d’intervalle.
22018 Valeur de caractère non valide pour la spécification de cast *StatementText contenait un type C qui était un type numérique exact ou approximatif, une datetime ou un type de données d’intervalle ; le type SQL de la colonne était un type de données caractère ; et la valeur de la colonne n’était pas un littéral valide du type C lié.

Lorsqu’un paramètre d’entrée/sortie ou de sortie a été retourné, le type SQL était un nombre exact ou approximatif, un datetime ou un type de données d’intervalle ; le type C était SQL_C_CHAR ; et la valeur de la colonne n’était pas un littéral valide du type SQL lié.
22019 Caractère d’échappement non valide L’instruction préparée associée à StatementHandle contenait un prédicat LIKE avec un ESCAPE dans la clause WHERE , et la longueur du caractère d’échappement suivant ESCAPE n’était pas égale à 1.
22025 Séquence d’échappement non valide L’instruction préparée associée à StatementHandle contenait « LIKEpattern valueESCAPEcharacter » dans la clause WHERE, et le caractère suivant le caractère d’échappement dans la valeur de modèle n’était pas l’un des « % » ou « _ ».
23000 Violation de contrainte d’intégrité L’instruction préparée associée à StatementHandle contenait un paramètre. La valeur de paramètre était NULL pour une colonne définie comme NOT NULL dans la colonne de table associée, une valeur en double a été fournie pour une colonne contrainte pour contenir uniquement des valeurs uniques, ou une autre contrainte d’intégrité a été violée.
24000 État de curseur non valide Un curseur a été positionné sur statementHandle par SQLFetch ou SQLFetchScroll. Cette erreur est retournée par le Gestionnaire de pilotes si SQLFetch ou SQLFetchScroll n’a pas retourné SQL_NO_DATA et est retournée par le pilote si SQLFetch ou SQLFetchScroll a retourné SQL_NO_DATA.

Un curseur a été ouvert sur StatementHandle.

L’instruction préparée associée à l’instruction StatementHandle contenait une instruction de mise à jour ou de suppression positionnée, et le curseur était positionné avant le début du jeu de résultats ou après la fin du jeu de résultats.
40001 Échec de sérialisation La transaction a été restaurée en raison d’un interblocage de ressources avec une autre transaction.
40003 Saisie semi-automatique de l’instruction inconnue La connexion associée a échoué pendant l’exécution de cette fonction et l’état de la transaction ne peut pas être déterminé.
42000 Erreur de syntaxe ou violation d’accès L’utilisateur n’a pas l’autorisation d’exécuter l’instruction préparée associée à StatementHandle.
44000 Violation de WITH CHECK OPTION L’instruction préparée associée à StatementHandle contenait une instruction INSERT effectuée sur une table vue ou une table dérivée de la table vue créée en spécifiant WITH CHECK OPTION, de sorte qu’une ou plusieurs lignes affectées par l’instruction INSERT ne seront plus présentes dans la table vue.

L’instruction préparée associée à l’instruction StatementHandle contenait une instruction UPDATE effectuée sur une table vue ou une table dérivée de la table vue créée en spécifiant WITH CHECK OPTION, de sorte qu’une ou plusieurs lignes affectées par l’instruction UPDATE ne seront plus présentes dans la table vue.
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 la mémoire tampon *MessageText 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.
HY008 Opération annulée Le traitement asynchrone a été activé pour StatementHandle. La fonction a été appelée et avant l’exécution terminée, SQLCancel ou SQLCancelHandle a été appelée sur StatementHandle. Ensuite, la fonction a été appelée à nouveau sur l’instructionHandle.

La fonction a été appelée et avant qu’elle ait terminé l’exécution, SQLCancel ou SQLCancelHandle a été appelée sur l’InstructionHandleà partir d’un autre thread dans une application multithread.
HY010 Erreur de séquence de fonction (DM) Une fonction en cours d’exécution asynchrone a été appelée pour le handle de connexion associé à StatementHandle. Cette fonction asynchrone était toujours en cours d’exécution lorsque la fonction SQLExecute a été appelée.

(DM) SQLExecute, SQLExecDirect ou SQLMoreResults a été appelé pour l’instruction StatementHandle 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.

(DM) Une fonction en cours d’exécution asynchrone (et non celle-ci) a été appelée pour l’instruction StatementHandle et était toujours en cours d’exécution lorsque cette fonction a été appelée.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos a été appelé pour l’instructionHandle et retourné SQL_NEED_DATA. Cette fonction a été appelée avant que les données ne soient envoyées pour tous les paramètres ou colonnes de données à l’exécution.

(DM) L’instructionHandle n’a pas été préparée.
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.
HY090 Longueur de la chaîne ou de la mémoire tampon non valide Une valeur de paramètre, définie avec SQLBindParameter, était un pointeur Null et la valeur de longueur du paramètre n’était pas 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM, ou inférieure ou égale à SQL_LEN_DATA_AT_EXEC_OFFSET.

Une valeur de paramètre, définie avec SQLBindParameter, n’était pas un pointeur Null ; le type de données C était SQL_C_BINARY ou SQL_C_CHAR ; et la valeur de longueur du paramètre était inférieure à 0, mais n’était pas SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM ou SQL_DATA_AT_EXEC, ou inférieure ou égale à SQL_LEN_DATA_AT_EXEC_OFFSET.

Une valeur de longueur de paramètre liée par SQLBindParameter a été définie sur SQL_DATA_AT_EXEC ; le type SQL était soit SQL_LONGVARCHAR, SQL_LONGVARBINARY, soit un type de données spécifique à une source de données longue ; et le type d’informations SQL_NEED_LONG_DATA_LEN dans SQLGetInfo était « Y ».
HY105 Type de paramètre non valide La valeur spécifiée pour l’argument InputOutputType dans SQLBindParameter était SQL_PARAM_OUTPUT et le paramètre était un paramètre d’entrée.
HY109 Position du curseur non valide L’instruction préparée était une instruction de mise à jour ou de suppression positionnée, et le curseur était positionné (par SQLSetPos ou SQLFetchScroll) sur une ligne qui avait été supprimée ou qui n’a pas pu être extraite.
HY117 Connecter ion 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 la fonction SQLEndTran.
HYC00 Fonctionnalité facultative non implémentée La combinaison des paramètres actuels des attributs d’instruction SQL_ATTR_CONCURRENCY et SQL_ATTR_CURSOR_TYPE n’a pas été prise en charge par le pilote ou la source de données.

L’attribut d’instruction SQL_ATTR_USE_BOOKMARKS a été défini sur SQL_UB_VARIABLE, et l’attribut d’instruction SQL_ATTR_CURSOR_TYPE a été défini sur un type de curseur pour lequel le pilote ne prend pas en charge les signets.
HYT00 Délai expiré La période d’expiration de la requête a expiré avant que la source de données ne retourne le jeu de résultats. La période d’expiration est définie via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Délai d’attente de la connexion expiré 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 SQLSet Connecter Attr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Le pilote ne prend pas en charge cette fonction (DM) Le pilote associé à StatementHandle ne prend pas en charge la fonction.
IM017 L’interrogation est désactivée en mode de notification asynchrone Chaque fois que le modèle de notification est utilisé, l’interrogation est désactivée.
IM018 SQLCompleteAsync n’a pas été appelé pour terminer l’opération asynchrone précédente sur ce handle. Si l’appel de fonction précédent sur le handle retourne SQL_STILL_EXECUTING et si le mode de notification est activé, SQLCompleteAsync doit être appelé sur le handle pour effectuer un post-traitement et terminer l’opération.

SQLExecute peut retourner n’importe quel SQLSTATE qui peut être retourné par SQLPrepare, en fonction du moment où la source de données évalue l’instruction SQL associée à l’instruction.

Commentaires

SQLExecute exécute une instruction préparée par SQLPrepare. Une fois l’application traitées ou dis carte les résultats d’un appel à SQLExecute, l’application peut appeler à nouveau SQLExecute avec de nouvelles valeurs de paramètre. Pour plus d’informations sur l’exécution préparée, consultez Exécution préparée.

Pour exécuter une instruction SELECT plusieurs fois, l’application doit appeler SQLCloseCursor avant d’exécuter l’instruction SELECT .

Si la source de données est en mode de validation manuelle (nécessitant une initiation de transaction explicite) et qu’une transaction n’a pas déjà été lancée, le pilote lance une transaction avant d’envoyer l’instruction SQL. Pour plus d’informations, consultez Transactions.

Si une application utilise SQLPrepare pour préparer et SQLExecute pour envoyer une instruction COMMIT ou ROLLBACK , elle ne sera pas interopérable entre les produits SGBD. Pour valider ou restaurer une transaction, appelez SQLEndTran.

Si SQLExecute rencontre un paramètre data-at-execution, il retourne SQL_NEED_DATA. L’application envoie les données à l’aide de SQLParamData et DE SQLPutData. Consultez SQLBindParameter, SQLParamData, SQLPutData et Envoi de données longues.

Si SQLExecute exécute une instruction de mise à jour, d’insertion ou de suppression recherchée qui n’affecte aucune ligne à la source de données, l’appel à SQLExecute retourne SQL_NO_DATA.

Si la valeur de l’attribut d’instruction SQL_ATTR_PARAMSET_SIZE est supérieure à 1 et que l’instruction SQL contient au moins un marqueur de paramètre, SQLExecute exécute l’instruction SQL une fois pour chaque ensemble de valeurs de paramètre dans les tableaux pointés par l’argument *ParameterValuePtr dans les appels à SQLBindParameter. Pour plus d’informations, consultez Tableaux de valeurs de paramètre.

Si les signets sont activés et qu’une requête est exécutée qui ne peut pas prendre en charge les signets, le pilote doit tenter de forcer l’environnement à un signet prenant en charge les signets en modifiant une valeur d’attribut et en retournant SQLSTATE 01S02 (valeur d’option modifiée). Si l’attribut ne peut pas être modifié, le pilote doit retourner SQLSTATE HY024 (valeur d’attribut non valide).

Remarque

Lorsque vous utilisez le regroupement de connexions, une application ne doit pas exécuter d’instructions SQL qui modifient la base de données ou le contexte de la base de données, comme l’instruction USEdatabase dans SQL Server, qui modifie le catalogue utilisé par une source de données.

Exemple de code

Consultez SQLBindParameter, SQLBulkOperations, SQLPutData et SQLSetPos.

Pour plus d’informations sur Consultez
Liaison d’une mémoire tampon à une colonne dans un jeu de résultats SQLBindCol, fonction
Annulation du traitement des instructions SQLCancel, fonction
Fermeture du curseur SQLCloseCursor, fonction
Exécution d’une opération de validation ou de restauration SQLEndTran, fonction
Exécution d’une instruction SQL SQLExecDirect, fonction
Extraction de plusieurs lignes de données SQLFetch, fonction
Extraction d’un bloc de données ou défilement d’un jeu de résultats SQLFetchScroll, fonction
Libération d’un handle d’instruction SQLFreeStmt, fonction
Retour d’un nom de curseur SQLGetCursorName, fonction
Extraction d’une partie ou de l’ensemble d’une colonne de données SQLGetData, fonction
Retour du paramètre suivant pour lequel envoyer des données SQLParamData, fonction
Préparation d’une instruction pour l’exécution SQLPrepare, fonction
Envoi de données de paramètre au moment de l’exécution SQLPutData, fonction
Définition d’un nom de curseur SQLSetCursorName, fonction
Définition d’un attribut d’instruction SQLSetStmtAttr, fonction

Voir aussi

Informations de référence sur l’API ODBC
Fichiers d’en-tête ODBC