Définition de valeurs de paramètres

Pour définir la valeur d’un paramètre, l’application définit simplement la valeur de la variable liée au paramètre. Il n’est pas important lorsque cette valeur est définie, tant qu’elle est définie avant l’exécution de l’instruction. L’application peut définir la valeur avant ou après la liaison de la variable, et elle peut modifier la valeur autant de fois que vous le souhaitez. Lorsque l’instruction est exécutée, le pilote récupère simplement la valeur actuelle de la variable. Cela est particulièrement utile lorsqu’une instruction préparée est exécutée plusieurs fois ; l’application définit de nouvelles valeurs pour certaines ou toutes les variables chaque fois que l’instruction est exécutée. Pour obtenir un exemple, consultez Exécution préparée, plus haut dans cette section.

Si une mémoire tampon de longueur/indicateur a été liée dans l’appel à SQLBindParameter, elle doit être définie sur l’une des valeurs suivantes avant l’exécution de l’instruction :

  • Longueur d’octet des données dans la variable liée. Le pilote case activée cette longueur uniquement si la variable est caractère ou binaire (ValueType est SQL_C_CHAR ou SQL_C_BINARY).

  • SQL_NTS. Les données sont une chaîne terminée par null.

  • SQL_NULL_DATA. La valeur de données est NULL et le pilote ignore la valeur de la variable liée.

  • SQL_DATA_AT_EXEC ou le résultat de la macro SQL_LEN_DATA_AT_EXEC. La valeur du paramètre doit être envoyée avec SQLPutData. Pour plus d’informations, consultez Envoi de données longues, plus loin dans cette section.

Le tableau suivant montre les valeurs de la variable liée et la mémoire tampon longueur/indicateur que l’application définit pour diverses valeurs de paramètre.

Paramètre

value
Paramètre

(SQL)

type de données
Variable (C)

type de données
Valeur dans

lié

variable
Valeur dans

longueur/indicateur

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS ou 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS ou 2
13 h SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
13 h SQL_TYPE_TIME SQL_C_CHAR {t '13 :00 :00'}\0[a], [c] SQL_NTS ou 14
NULL SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] « \0 » représente un caractère d’arrêt null. Le caractère d’arrêt null n’est requis que si la valeur de la mémoire tampon de longueur/indicateur est SQL_NTS.

[b] Les nombres de cette liste sont les nombres stockés dans les champs de la structure TIME_STRUCT.

[c] La chaîne utilise la clause d’échappement de date ODBC. Pour plus d’informations, consultez Littéraux date, heure et horodatage.

[d] Les pilotes doivent toujours case activée cette valeur pour voir s’il s’agit d’une valeur spéciale, telle que SQL_NULL_DATA.

Ce qu’un pilote fait avec une valeur de paramètre au moment de l’exécution dépend du pilote. Si nécessaire, le pilote convertit la valeur du type de données C et de la longueur d’octet de la variable liée en type de données SQL, précision et échelle du paramètre. Dans la plupart des cas, le pilote envoie ensuite la valeur à la source de données. Dans certains cas, il met en forme la valeur sous forme de texte et l’insère dans l’instruction SQL avant d’envoyer l’instruction à la source de données.