Udostępnij przez


Buforów

Bufor to dowolny element pamięci aplikacji używany do przekazywania danych między aplikacją a sterownikiem. Na przykład bufory aplikacji mogą być skojarzone z kolumnami zestawu wyników lub powiązane z nimi za pomocą SQLBindCol. Po pobraniu każdego wiersza dane są zwracane dla każdej kolumny w tych buforach. wejściowe są używane do przekazywania danych z aplikacji do sterownika; wyjściowe są używane do zwracania danych ze sterownika do aplikacji.

Uwaga / Notatka

Jeśli funkcja ODBC zwraca SQL_ERROR, zawartość wszystkich argumentów wyjściowych tej funkcji jest niezdefiniowana.

Dyskusja ta dotyczy przede wszystkim buforów o nieokreślonym typie. Adresy tych buforów pojawiają się jako argumenty typu SQLPOINTER, takie jak argument TargetValuePtr w funkcji SQLBindCol. Jednak niektóre omówione tutaj elementy, takie jak argumenty używane z buforami, mają zastosowanie również do argumentów używanych do przekazywania ciągów znaków do sterownika, takich jak argument TableName w SQLTables.

Te bufory zwykle występują w parach. Bufory danych są używane do przekazywania samych danych, podczas gdy bufory długości/wskaźników są używane do przekazywania długości danych w buforze danych lub specjalnej wartości, takiej jak SQL_NULL_DATA, co wskazuje na to, że dane są NULL. Długość danych w buforze danych różni się od długości samego buforu danych. Poniższa ilustracja przedstawia relację między buforem danych a buforem długości/wskaźnika.

Bufor danych i bufor długości/wskaźników

Bufor długości/wskaźnika jest wymagany za każdym razem, gdy bufor danych zawiera dane o zmiennej długości, takie jak dane znakowe lub binarne. Jeśli bufor danych zawiera dane o stałej długości, takie jak liczba całkowita lub struktura dat, bufor długości/wskaźnika jest wymagany tylko do przekazywania wartości wskaźnika, ponieważ długość danych jest już znana. Jeśli aplikacja używa buforu długości/wskaźnika z danymi o stałej długości, sterownik ignoruje wszystkie przekazane długości.

Długość zarówno buforu danych, jak i danych, które zawiera, jest mierzona w bajtach, w przeciwieństwie do znaków. To rozróżnienie jest nieistotne dla programów korzystających z ciągów ANSI, ponieważ długości w bajtach i znakach są takie same.

Gdy bufor danych reprezentuje pole deskryptora zdefiniowanego przez sterownik, pole diagnostyczne lub atrybut, aplikacja powinna wskazać menedżerowi sterowników charakter argumentu funkcji, który wskazuje wartość pola lub atrybutu. Aplikacja robi to, ustawiając argument length w dowolnym wywołaniu funkcji, który ustawia pole lub atrybut na jedną z następujących wartości. (To samo dotyczy funkcji, które pobierają wartości pola lub atrybutu, z wyjątkiem, że argument wskazuje wartości, które dla funkcji ustawienia znajdują się w samym argumencie).

  • Jeśli argument funkcji wskazujący wartość pola lub atrybutu jest wskaźnikiem do ciągu znaków, argument length jest długością ciągu lub SQL_NTS.

  • Jeśli argument funkcji wskazujący wartość pola lub atrybutu jest wskaźnikiem do buforu binarnego, aplikacja umieszcza wynik makra SQL_LEN_BINARY_ATTR(length) w argumencie length . Spowoduje to umieszczenie wartości ujemnej w argumencie length .

  • Jeśli argument funkcji wskazujący wartość pola lub atrybutu jest wskaźnikiem do wartości innej niż ciąg znaków lub ciąg binarny, argument długości powinien mieć wartość SQL_IS_POINTER.

  • Jeśli argument funkcji wskazujący wartość pola lub atrybutu zawiera wartość o stałej długości, argument długości jest SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT lub SQL_ISI_USMALLINT odpowiednio.

Ta sekcja zawiera następujące tematy.