Udostępnij przez


Długość buforu danych

Aplikacja przekazuje długość bajtu buforu danych do sterownika w argumencie o nazwie BufferLength lub podobnej nazwie. Na przykład w poniższym wywołaniu metody SQLBindCol aplikacja określa długość buforu ValuePtr (sizeof(ValuePtr)):

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

Sterownik zawsze zwraca liczbę bajtów, a nie liczbę znaków w argumencie długości buforu dowolnej funkcji, która ma argument ciągu wyjściowego.

Długości buforów danych są wymagane tylko dla buforów wyjściowych; sterownik używa ich, aby uniknąć zapisywania poza końcem buforu. Sterownik sprawdza jednak długość buforu danych tylko wtedy, gdy bufor zawiera dane o zmiennej długości, takie jak dane znakowe lub binarne. Jeśli bufor zawiera dane o stałej długości, takie jak liczba całkowita lub struktura dat, sterownik ignoruje długość buforu danych i zakłada, że bufor jest wystarczająco duży, aby przechowywać dane; oznacza to, że nigdy nie obcina danych o stałej długości. Dlatego aplikacja musi przydzielić wystarczająco duży bufor dla danych o stałej długości.

Kiedy dochodzi do obcięcia ciągów wyjściowych niebędących danymi (takich jak nazwa kursora zwrócona przez SQLGetCursorName), zwracana długość w argumencie długości buforu to maksymalna możliwa długość znaków.

Długości buforów danych nie są wymagane dla buforów wejściowych, ponieważ sterownik nie zapisuje w te bufory.

Ta sekcja zawiera następujące tematy.