Condividi tramite


Lunghezza buffer di dati

L'applicazione passa la lunghezza in byte del buffer di dati al driver in un argomento, denominato BufferLength o un nome simile. Ad esempio, nella chiamata seguente a SQLBindCol, l'applicazione specifica la lunghezza del buffer ValuePtr (sizeof(ValuePtr)):

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

Un driver restituirà sempre il numero di byte, non il numero di caratteri, nell'argomento lunghezza del buffer di qualsiasi funzione con un argomento stringa di output.

Le lunghezze del buffer di dati sono necessarie solo per i buffer di output; il driver li usa per evitare di scrivere oltre la fine del buffer. Tuttavia, il driver controlla la lunghezza del buffer di dati solo quando il buffer contiene dati a lunghezza variabile, ad esempio dati di tipo carattere o binario. Se il buffer contiene dati a lunghezza fissa, ad esempio una struttura integer o data, il driver ignora la lunghezza del buffer dati e presuppone che il buffer sia sufficientemente grande da contenere i dati; ovvero non tronca mai i dati a lunghezza fissa. È quindi importante per l'applicazione allocare un buffer sufficientemente grande per i dati a lunghezza fissa.

Quando si verifica un troncamento di stringhe di output non di dati,ad esempio il nome del cursore restituito per SQLGetCursorName, la lunghezza restituita nell'argomento lunghezza del buffer è la lunghezza massima possibile del carattere.

Le lunghezze del buffer di dati non sono necessarie per i buffer di input perché il driver non scrive in questi buffer.

Questa sezione contiene i seguenti argomenti: