Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Les paramètres d’entrée qui font référence aux données de caractères de longueur variable (telles que les noms de colonnes, les paramètres dynamiques et les valeurs d’attribut de chaîne) ont un paramètre de longueur associé. Si l’application met fin à des chaînes avec le caractère Null, comme c’est le cas en C, elle fournit en tant qu’argument la longueur en octets de la chaîne (sans inclure le point de terminaison Null) ou SQL_NTS (Null-Terminated String). Un argument de longueur non négatif spécifie la longueur réelle de la chaîne associée. L’argument de longueur peut être 0 pour spécifier une chaîne de longueur nulle, qui est distincte d’une valeur NULL. La valeur négative SQL_NTS dirige le pilote pour déterminer la longueur de la chaîne en localisant le caractère d’arrêt null.
Lorsque les données de texte sont renvoyées du pilote à l'application, le pilote doit toujours les terminer par un caractère nul. Cela donne à l’application le choix de gérer les données sous la forme d’une chaîne ou d’un tableau de caractères. Si le tampon de l'application n'est pas suffisamment grand pour renvoyer toutes les données de caractères, le pilote tronque les données à la longueur en octets du tampon moins le nombre d'octets requis pour le caractère nul, termine ces données tronquées par un caractère NULL, et les stocke dans le tampon. Par conséquent, les applications doivent toujours allouer de l’espace supplémentaire pour le caractère de terminaison Null dans les mémoires tampons utilisées pour récupérer des données de caractères. Par exemple, une mémoire tampon de 51 octets est nécessaire pour récupérer 50 caractères de données.
Une attention particulière doit être prise par l’application et le pilote lors de l’envoi ou de la récupération de données de caractères longs par morceaux avec SQLPutData ou SQLGetData. Si les données sont passées sous la forme d’une série de chaînes terminées par null, les caractères d’arrêt null sur ces chaînes doivent être supprimés avant que les données puissent être réassemblées.
Un certain nombre de programmeurs ODBC ont confondu les données de caractères et les chaînes C. Cela s’est produit comme un artefact d’utilisation du langage C lors de la définition des fonctions ODBC. Si un pilote ou une application ODBC utilise un autre langage - n’oubliez pas que ODBC est indépendant du langage - cette confusion est moins susceptible de survenir.
Lorsque les chaînes C sont utilisées pour contenir des données de caractères, le caractère de terminaison Null n’est pas considéré comme faisant partie des données et n’est pas compté dans le cadre de sa longueur d’octet. Par exemple, les données de caractère « ABC » peuvent être conservées sous la forme de la chaîne C « ABC\0 » ou du tableau de caractères {'A', 'B', 'C'}. La longueur d’octets des données est 3, qu’elles soient traitées comme une chaîne ou un tableau de caractères.
Bien que les applications et les pilotes utilisent généralement des chaînes C (tableaux de caractères se terminant par null) pour contenir des données de caractères, il n’est pas nécessaire de le faire. En C, les données de caractères peuvent également être traitées comme un tableau de caractères (sans terminaison null) et sa longueur d’octet passée séparément dans la mémoire tampon longueur/indicateur.
Étant donné que les données de caractères peuvent être conservées dans un tableau non terminé par un caractère nul et que sa longueur en octets est transmise séparément, il est possible d’incorporer des caractères nuls dans les données de caractères. Toutefois, le comportement des fonctions ODBC dans ce cas n’est pas défini et il est spécifique au pilote si un pilote gère cela correctement. Par conséquent, les applications interopérables doivent toujours gérer les données de caractères qui peuvent contenir des caractères null incorporés en tant que données binaires.