Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A aplicação passa o comprimento do byte do buffer de dados para o driver num argumento, denominado BufferLength ou um nome semelhante. Por exemplo, na chamada seguinte ao SQLBindCol, a aplicação 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 devolverá sempre o número de bytes, e não o número de caracteres, no argumento de comprimento do buffer de qualquer função que tenha um argumento de cadeia de saída.
Os comprimentos dos buffers de dados são necessários apenas para buffers de saída; o driver usa-os para evitar escrever para além do fim do buffer. No entanto, o controlador verifica o comprimento do buffer de dados apenas quando este contém dados de comprimento variável, como dados de caracteres ou binários. Se o buffer contiver dados de comprimento fixo, como uma estrutura de inteiros ou data, o driver ignora o comprimento do buffer de dados e assume que o buffer é suficientemente grande para armazenar os dados; ou seja, nunca trunca dados de comprimento fixo. Por isso, é importante que a aplicação aloque um buffer suficientemente grande para dados de comprimento fixo.
Quando ocorre o truncamento de cadeias de saída que não contêm dados (como o nome do cursor retornado por SQLGetCursorName), o comprimento indicado no argumento de comprimento do buffer é o máximo de caracteres possível.
Os comprimentos dos buffers de dados não são necessários para os buffers de entrada porque o driver não escreve nestes buffers.
Esta seção contém os seguintes tópicos.