Поделиться через


Длина буфера данных

Приложение передает длину байтов буфера данных драйверу в аргументе с именем BufferLength или аналогичным именем. Например, в следующем вызове SQLBindCol приложение указывает длину буфера ValuePtr (sizeof(ValuePtr)):

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

Драйвер всегда возвращает количество байтов, а не количество символов в аргументе длины буфера любой функции, которая имеет выходной строковый аргумент.

Длина буфера данных требуется только для выходных буферов; Драйвер использует их для предотвращения записи в конце буфера. Однако драйвер проверка длину буфера данных, только если буфер содержит данные переменной длины, например символьные или двоичные данные. Если буфер содержит данные фиксированной длины, такие как целочисленная или структура дат, драйвер игнорирует длину буфера данных и предполагает, что буфер достаточно велик для хранения данных; т. е. данные фиксированной длины никогда не усечены. Поэтому для приложения важно выделить достаточно большой буфер для данных фиксированной длины.

При усечении строк выходных данных (например, имени курсора, возвращаемого для SQLGetCursorName), возвращаемая длина в аргументе длины буфера является максимальной длиной символов.

Длина буфера данных не требуется для входных буферов, так как драйвер не записывает в эти буферы.

Этот раздел содержит следующие подразделы.