Partager via


Longueur du tampon de données

L’application transmet la longueur d’octet de la mémoire tampon de données au pilote dans un argument, nommé BufferLength ou un nom similaire. Par exemple, dans l’appel suivant à SQLBindCol, l’application spécifie la longueur de la mémoire tampon ValuePtr (sizeof(ValuePtr)) :

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

Un pilote retourne toujours le nombre d’octets, et non le nombre de caractères, dans l’argument de longueur de mémoire tampon d’une fonction qui a un argument de chaîne de sortie.

Les longueurs des mémoires tampons de données sont requises uniquement pour les mémoires tampons de sortie ; le pilote les utilise pour éviter d’écrire au-delà de la fin de la mémoire tampon. Toutefois, le pilote case activée la longueur de la mémoire tampon de données uniquement lorsque la mémoire tampon contient des données de longueur variable, telles que des données caractère ou binaires. Si la mémoire tampon contient des données de longueur fixe, telles qu’un entier ou une structure de date, le pilote ignore la longueur de la mémoire tampon de données et suppose que la mémoire tampon est suffisamment grande pour contenir les données ; autrement dit, il ne tronque jamais les données de longueur fixe. Il est donc important que l’application alloue une mémoire tampon suffisante pour les données de longueur fixe.

Lorsqu’une troncation de chaînes de sortie non de données se produit (par exemple, le nom du curseur retourné pour SQLGetCursorName), la longueur retournée dans l’argument de longueur de mémoire tampon est la longueur maximale possible.

Les longueurs de mémoire tampon de données ne sont pas requises pour les mémoires tampons d’entrée, car le pilote n’écrit pas dans ces mémoires tampons.

Cette section contient les rubriques suivantes :