Partager via


Procédure : exécuter directement une instruction (ODBC)

Pour exécuter une instruction directement et une seule fois

  1. Si l'instruction contient des marqueurs de paramètres, utilisez SQLBindParameter pour lier chaque paramètre à une variable de programme. Remplissez les variables de programme de valeurs de données, puis configurez tous les paramètres de données en cours d'exécution.

  2. Appelez SQLExecDirect pour exécuter l'instruction.

  3. Si vous utilisez des paramètres d'entrée de données en cours d'exécution, SQLExecDirect retourne SQL_NEED_DATA. Envoyez les données par segments à l'aide de SQLParamData et SQLPutData.

Pour exécuter plusieurs fois une instruction au moyen d'une liaison de paramètre selon les colonnes

  1. Appelez SQLSetStmtAttr pour définir les attributs suivants :

    Définissez SQL_ATTR_PARAMSET_SIZE au nombre de jeux (S) de paramètres.

    Définissez SQL_ATTR_PARAM_BIND_TYPE à SQL_PARAMETER_BIND_BY_COLUMN.

    Définissez l'attribut SQL_ATTR_PARAMS_PROCESSED_PTR de sorte qu'il pointe vers une variable SQLUINTEGER contenant le nombre de paramètres traités.

    Définissez SQL_ATTR_PARAMS_STATUS_PTR de sorte qu'il pointe vers un tableau [S] de variables SQLUSSMALLINT contenant les indicateurs d'état de paramètre.

  2. Pour chaque marqueur de paramètre :

    Allouez un tableau de S mémoires tampons de paramètres pour stocker les valeurs de données.

    Allouez un tableau de S mémoires tampons de paramètres pour stocker les longueurs de données.

    Appelez SQLBindParameter pour lier les tableaux de valeur de données et de longueur de données de paramètre au paramètre d'instruction.

    Configurez toutes les paramètres d'image ou de texte de données en cours d'exécution.

    Mettez les valeurs de données S et les longueurs de données S dans les tableaux de paramètres liés.

  3. Appelez SQLExecDirect pour exécuter l'instruction. Le pilote exécute efficacement l'instruction S fois, une fois pour chaque jeu de paramètres.

  4. Si vous utilisez des paramètres d'entrée de données en cours d'exécution, SQLExecDirect retourne SQL_NEED_DATA. Envoyez les données par segments à l'aide de SQLParamData et SQLPutData.

Pour exécuter plusieurs fois une instruction au moyen d'une liaison de paramètre selon les lignes

  1. Allouez un tableau [S] de structures, où S est le nombre de jeux de paramètres. La structure dispose d'un élément pour chaque paramètre et chaque élément contient deux parties :

    La première partie est une variable du type de données approprié destinée à contenir les données de paramètres.

    La deuxième partie est une variable SQLINTEGER destinée à contenir l'indicateur d'état.

  2. Appelez SQLSetStmtAttr pour définir les attributs suivants :

    Définissez SQL_ATTR_PARAMSET_SIZE au nombre de jeux (S) de paramètres.

    Définissez SQL_ATTR_PARAM_BIND_TYPE à la taille de la structure allouée à l'étape 1.

    Définissez l'attribut SQL_ATTR_PARAMS_PROCESSED_PTR de sorte qu'il pointe vers une variable SQLUINTEGER contenant le nombre de paramètres traités.

    Définissez SQL_ATTR_PARAMS_STATUS_PTR de sorte qu'il pointe vers un tableau [S] de variables SQLUSSMALLINT contenant les indicateurs d'état de paramètre.

  3. Pour chaque marqueur de paramètre, appelez SQLBindParameter pour diriger les pointeurs de valeur de données et de longueur de données de paramètre vers leurs variables dans le premier élément du tableau de structures alloué à l'étape 1. Si le paramètre est un paramètre de données en cours d'exécution, installez-le.

  4. Remplissez le tableau de tampons de paramètres liés avec les valeurs de données.

  5. Appelez SQLExecDirect pour exécuter l'instruction. Le pilote exécute efficacement l'instruction S fois, une fois pour chaque jeu de paramètres.

  6. Si vous utilisez des paramètres d'entrée de données en cours d'exécution, SQLExecDirect retourne SQL_NEED_DATA. Envoyez les données par segments à l'aide de SQLParamData et SQLPutData.

Remarque   En règle générale, la liaison selon les colonnes et les lignes est employée davantage avec SQLPrepare et SQLExecute qu'avec SQLExecDirect.