Partage via


Exécution directe dans ODBC

L’exécution directe est le moyen le plus simple d’exécuter une instruction. Lorsque l’instruction est envoyée pour l’exécution, la source de données la compile dans un plan d’accès, puis exécute ce plan d’accès.

L’exécution directe est couramment utilisée par les applications génériques qui créent et exécutent des instructions au moment de l’exécution. Par exemple, le code suivant génère une instruction SQL et l’exécute une seule fois :

SQLCHAR *SQLStatement;  
  
// Build a SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

L’exécution directe fonctionne le mieux pour les instructions qui seront exécutées une seule fois. Son principal inconvénient est que l’instruction SQL est analysée chaque fois qu’elle est exécutée. En outre, l’application ne peut pas récupérer des informations sur le jeu de résultats créé par l’instruction (le cas échéant) jusqu’à ce que l’instruction soit exécutée ; cela est possible si l’instruction est préparée et exécutée en deux étapes distinctes.

Pour exécuter une instruction directement, l’application effectue les actions suivantes :

  1. Définit les valeurs de tous les paramètres. Pour plus d’informations, consultez Paramètres d’instruction, plus loin dans cette section.

  2. Appelle SQLExecDirect et le transmet à une chaîne contenant l’instruction SQL.

  3. Quand SQLExecDirect est appelé, le pilote :

    • Modifie l’instruction SQL pour utiliser la grammaire SQL de la source de données sans analyser l’instruction ; cela inclut le remplacement des séquences d’échappement décrites dans séquences d’échappement dans ODBC. L’application peut récupérer la forme modifiée d’une instruction SQL en appelant SQLNativeSql. Les séquences d’échappement ne sont pas remplacées si l’attribut d’instruction SQL_ATTR_NOSCAN est défini.

    • Récupère les valeurs de paramètre actuelles et les convertit si nécessaire. Pour plus d’informations, consultez Paramètres d’instruction, plus loin dans cette section.

    • Envoie l’instruction et les valeurs de paramètre converties à la source de données pour l’exécution.

    • Retourne toutes les erreurs. Il s’agit notamment de diagnostics de séquencement ou d’état tels que SQLSTATE 24000 (état de curseur non valide), d’erreurs syntaxiques telles que SQLSTATE 42000 (erreur de syntaxe ou violation d’accès) et d’erreurs sémantiques telles que SQLSTATE 42S02 (table de base ou vue introuvable).