Condividi tramite


Lunghezza del buffer dei dati

L'applicazione passa al driver di un argomento la lunghezza in byte del buffer di dati, denominata BufferLength o con 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 dei dati sono necessarie solo per i buffer di output; il driver le usa per evitare di scrivere oltre la fine del buffer. Tuttavia, il driver controlla la lunghezza del buffer dei 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 di valori interi o di date, 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 di caratteri possibile.

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

Questa sezione descrive gli argomenti seguenti: