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 « LIKE pattern value ESCAPE character » 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. |
24 000 | É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 | 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 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 connexion est définie via SQLSetConnectAttr, 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 que l’application traite ou ignore 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 USE database dans SQL Server, qui modifie le catalogue utilisé par une source de données.
Exemple de code
Consultez SQLBindParameter, SQLBulkOperations, SQLPutData et SQLSetPos.
Fonctions connexes
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