Share via


Comprimento do buffer de dados

O aplicativo passa o comprimento de byte do buffer de dados para o driver em um argumento, chamado BufferLength ou um nome semelhante. Por exemplo, na seguinte chamada para SQLBindCol, o aplicativo especifica o comprimento do buffer ValuePtr (sizeof(ValuePtr)):

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

Um driver sempre retornará o número de bytes, não o número de caracteres, no argumento de comprimento do buffer de qualquer função que tenha um argumento de cadeia de caracteres de saída.

Os comprimentos de buffer de dados são necessários apenas para buffers de saída; o driver os usa para evitar escrever além do final do buffer. No entanto, o driver verifica o comprimento do buffer de dados somente quando o buffer contém dados de comprimento variável, como dados de caracteres ou binários. Se o buffer contiver dados de comprimento fixo, como um inteiro ou uma estrutura de data, o driver ignorará o comprimento do buffer de dados e assumirá que o buffer é grande o suficiente para armazenar os dados; ou seja, ele nunca trunca dados de comprimento fixo. Portanto, é importante que o aplicativo aloque um buffer grande o suficiente para dados de comprimento fixo.

Quando ocorre um truncamento de cadeias de caracteres de saída que não são de dados (como o nome do cursor retornado para SQLGetCursorName), o comprimento retornado no argumento de comprimento do buffer é o comprimento máximo de caractere possível.

Os comprimentos de buffer de dados não são necessários para buffers de entrada porque o driver não grava nesses buffers.

Esta seção contém os tópicos a seguir.