Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Bufor długości/wskaźnika służy do przekazywania długości bajtów danych w buforze danych lub specjalnego wskaźnika, takiego jak SQL_NULL_DATA, co wskazuje, że dane mają wartość NULL. W zależności od funkcji, w której jest używana, bufor długości/wskaźnika jest definiowany jako SQLINTEGER lub SQLSMALLINT. W związku z tym potrzebny jest jeden argument, aby go opisać. Jeśli bufor danych jest niezdeferowanym buforem wejściowym, ten argument zawiera długość bajtów danych lub wartość wskaźnika. Często nazywa się StrLen_or_Ind lub podobnie. Na przykład poniższy kod wywołuje metodę SQLPutData , aby przekazać bufor pełen danych; długość bajtu (ValueLen) jest przekazywana bezpośrednio, ponieważ bufor danych (ValuePtr) jest buforem wejściowym.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLen;
// Call local function to place data in ValuePtr. In ValueLen, return the
// number of bytes of data placed in ValuePtr. If there is not enough
// data, this will be less than 50.
FillBuffer(ValuePtr, sizeof(ValuePtr), &ValueLen);
// Call SQLPutData to send the data to the driver.
SQLPutData(hstmt, ValuePtr, ValueLen);
Jeśli bufor danych jest buforem wejściowym odroczonym, niezdeferowanym buforem wyjściowym lub buforem wyjściowym, argument zawiera adres bufora długości/wskaźnika. Często nazywa się StrLen_or_IndPtr lub podobną nazwą. Na przykład poniższy kod wywołuje metodę SQLGetData , aby pobrać bufor pełen danych; długość bajtu jest zwracana do aplikacji w buforze długości/wskaźnika (ValueLenOrInd), którego adres jest przekazywany do danych SQLGetData , ponieważ odpowiedni bufor danych (ValuePtr) jest niezdeferowanym buforem wyjściowym.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLenOrInd;
SQLGetData(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);
Jeśli nie jest to specjalnie zabronione, argument buforu długości/wskaźnika może mieć wartość 0 (jeśli niezdeferowane dane wejściowe) lub wskaźnik o wartości null (jeśli dane wyjściowe lub odroczone dane wejściowe). W przypadku buforów wejściowych, powoduje to zignorowanie przez sterownik długości danych w bajtach. Zwraca błąd podczas przekazywania danych o zmiennej długości, ale jest typowy podczas przekazywania danych o stałej długości innej niż null, ponieważ nie jest wymagana ani długość, ani wartość wskaźnika. W przypadku buforów wyjściowych powoduje to, że sterownik nie zwraca długości danych w bajtach ani wartości wskaźnika. Jest to błąd, jeśli dane zwracane przez sterownik mają wartość NULL, co jest jednak powszechne przy pobieraniu danych o stałej długości, które nie mogą mieć wartości null, ponieważ nie jest potrzebna ani długość, ani wskaźnik.
Tak jak wtedy, gdy adres buforu danych odroczonych jest przekazywany do sterownika, adres bufora długości/wskaźnika dla danych odroczonych musi pozostać prawidłowy, dopóki bufor nie zostanie odłączony.
Następujące długości są prawidłowe jako wartości długości/wskaźnika:
n, gdzie n> 0.
-
SQL_NTS. Ciąg wysyłany do sterownika w odpowiednim buforze danych jest zakończony wartością null; Jest to wygodny sposób przekazywania ciągów przez programistów języka C bez konieczności obliczania ich długości bajtów. Ta wartość jest legalna tylko wtedy, gdy aplikacja wysyła dane do sterownika. Gdy sterownik zwraca dane do aplikacji, zawsze zwraca rzeczywistą długość bajtu danych.
Poniższe wartości są prawidłowe jako wartości długości/wskaźnika. SQL_NULL_DATA jest przechowywany w polu deskryptora SQL_DESC_INDICATOR_PTR; wszystkie inne wartości są przechowywane w polu deskryptora SQL_DESC_OCTET_LENGTH_PTR.
SQL_NULL_DATA. Dane są wartością danych NULL, a wartość w odpowiednim buforze danych jest ignorowana. Ta wartość jest legalna tylko dla danych SQL wysyłanych do lub pobieranych ze sterownika.
SQL_DATA_AT_EXEC. Bufor danych nie zawiera żadnych danych. Zamiast tego dane będą wysyłane z funkcją SQLPutData po wykonaniu instrukcji lub wywołaniu metody SQLBulkOperations lub SQLSetPos . Ta wartość jest legalna tylko dla danych SQL wysyłanych do sterownika. Aby uzyskać więcej informacji, zobacz SQLBindParameter, SQLBulkOperations i SQLSetPos.
Wynik makra SQL_LEN_DATA_AT_EXEC(length). Ta wartość jest podobna do SQL_DATA_AT_EXEC. Aby uzyskać więcej informacji, zobacz Wysyłanie długich danych.
SQL_NO_TOTAL. Sterownik nie może określić liczby bajtów długich danych nadal dostępnych do zwrócenia w buforze wyjściowym. Ta wartość jest legalna tylko dla danych SQL pobranych ze sterownika.
SQL_DEFAULT_PARAM. Procedura polega na użyciu wartości domyślnej parametru wejściowego w procedurze zamiast wartości w odpowiednim buforze danych.
SQL_COLUMN_IGNORE. SqlBulkOperations lub SQLSetPos ma ignorować wartość w buforze danych. Podczas aktualizowania wiersza danych przez wywołanie metody SQLBulkOperations lub SQLSetPos wartość kolumny nie jest zmieniana. W przypadku wstawiania nowego wiersza danych przez wywołanie metody SQLBulkOperations wartość kolumny jest ustawiona na wartość domyślną lub, jeśli kolumna nie ma wartości domyślnej, ma wartość NULL.