Partager via


Mémoires tampons

Une mémoire tampon est tout élément de mémoire d’application utilisé pour transmettre des données entre l’application et le pilote. Par exemple, les mémoires tampons d’application peuvent être associées ou liées à des colonnes de jeu de résultats avec SQLBindCol. À mesure que chaque ligne est extraite, les données sont retournées pour chaque colonne dans ces mémoires tampons. Les mémoires tampons d’entrée sont utilisées pour transmettre des données de l’application au pilote ; Les mémoires tampons de sortie sont utilisées pour retourner des données du pilote à l’application.

Remarque

Si une fonction ODBC retourne SQL_ERROR, le contenu des arguments de sortie à cette fonction n’est pas défini.

Cette discussion s’inquiète principalement des mémoires tampons de type indéterminé. Les adresses de ces mémoires tampons apparaissent sous forme d’arguments de type SQLPOINTER, tels que l’argument TargetValuePtr dans SQLBindCol. Toutefois, certains des éléments abordés ici, tels que les arguments utilisés avec des mémoires tampons, s’appliquent également aux arguments utilisés pour passer des chaînes au pilote, comme l’argument TableName dans SQLTables.

Ces mémoires tampons sont généralement fournies en paires. Les mémoires tampons de données sont utilisées pour transmettre les données elles-mêmes, tandis que les mémoires tampons de longueur/indicateur sont utilisées pour passer la longueur des données dans la mémoire tampon de données ou une valeur spéciale telle que SQL_NULL_DATA, ce qui indique que les données sont NULL. La longueur des données d’une mémoire tampon de données diffère de la longueur de la mémoire tampon de données elle-même. L’illustration suivante montre la relation entre la mémoire tampon de données et la mémoire tampon longueur/indicateur.

Data buffer and length/indicator buffer

Une mémoire tampon de longueur/indicateur est requise chaque fois que la mémoire tampon de données contient des données de longueur variable, telles que des données caractère ou binaires. Si la mémoire tampon de données contient des données de longueur fixe, telles qu’un entier ou une structure de date, une mémoire tampon de longueur/indicateur est nécessaire uniquement pour transmettre des valeurs d’indicateur, car la longueur des données est déjà connue. Si une application utilise une mémoire tampon de longueur/indicateur avec des données de longueur fixe, le pilote ignore toutes les longueurs passées.

La longueur de la mémoire tampon de données et des données qu’elle contient est mesurée en octets, par opposition aux caractères. Cette distinction n’est pas importante pour les programmes qui utilisent des chaînes ANSI, car les longueurs en octets et les caractères sont identiques.

Lorsque la mémoire tampon de données représente un champ descripteur défini par le pilote, un champ de diagnostic ou un attribut, l’application doit indiquer au Gestionnaire de pilotes la nature de l’argument de fonction qui indique la valeur du champ ou de l’attribut. L’application effectue cette opération en définissant l’argument de longueur dans n’importe quel appel de fonction qui définit le champ ou l’attribut sur l’une des valeurs suivantes. (Il en va de même pour les fonctions qui récupèrent les valeurs du champ ou de l’attribut, à l’exception que l’argument pointe vers les valeurs qui pour la fonction de paramètre se trouvent dans l’argument lui-même.)

  • Si l’argument de fonction qui indique la valeur du champ ou de l’attribut est un pointeur vers une chaîne de caractères, l’argument de longueur est la longueur de la chaîne ou du SQL_NTS.

  • Si l’argument de fonction qui indique la valeur du champ ou de l’attribut est un pointeur vers une mémoire tampon binaire, l’application place le résultat de la macro SQL_LEN_BINARY_ATTR(length) dans l’argument de longueur . Cela place une valeur négative dans l’argument de longueur .

  • Si l’argument de fonction qui indique la valeur du champ ou de l’attribut est un pointeur vers une valeur autre qu’une chaîne de caractères ou une chaîne binaire, l’argument de longueur doit avoir la valeur SQL_IS_POINTER.

  • Si l’argument de fonction qui indique la valeur du champ ou de l’attribut contient une valeur de longueur fixe, l’argument de longueur est SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT ou SQL_ISI_USMALLINT, le cas échéant.

Cette section contient les rubriques suivantes :