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.
Długość danych jest długością bajtów danych, ponieważ będą przechowywane w buforze danych aplikacji, a nie tak, jak są przechowywane w źródle danych. To rozróżnienie jest ważne, ponieważ dane są często przechowywane w różnych typach w buforze danych niż w źródle danych. W przypadku danych wysyłanych do źródła danych jest to długość bajtów danych przed konwersją na typ źródła danych. W przypadku danych pobieranych ze źródła danych jest to długość danych w bajtach po konwersji na typ buforu danych i przed dokonaniem jakiegokolwiek obcięcia.
W przypadku danych o stałej długości, takich jak liczba całkowita lub struktura dat, długość bajtów danych jest zawsze rozmiarem typu danych. Ogólnie rzecz biorąc, aplikacje przydzielają bufor danych o rozmiarze typu danych. Jeśli aplikacja przydziela mniejszy bufor, konsekwencje są niezdefiniowane, ponieważ sterownik zakłada, że bufor danych jest rozmiarem typu danych i nie obcina danych w celu dopasowania ich do mniejszego buforu. Jeśli aplikacja przydziela większy bufor, dodatkowe miejsce nigdy nie jest używane.
W przypadku danych o zmiennej długości, takich jak dane znakowe lub binarne, należy pamiętać, że długość bajtów danych jest oddzielona i często różni się od długości bajtów buforu. Relacja tych dwóch długości jest opisana w sekcji Bufory. Jeśli długość bajtu danych jest większa niż długość bajtu buforu, sterownik obcina dane pobrane do długości bajtu buforu i zwraca SQL_SUCCESS_WITH_INFO z wartością SQLSTATE 01004 (Dane obcięte). Jednak zwracana długość w bajtach to długość nieobciętych danych.
Załóżmy na przykład, że aplikacja przydziela 50 bajtów dla binarnego buforu danych. Jeśli sterownik ma 10 bajtów danych binarnych do zwrócenia, zwraca te 10 bajtów w buforze. Długość bajtu danych wynosi 10, a długość bajtu buforu wynosi 50. Jeśli sterownik ma do zwrócenia 60 bajtów danych binarnych, przycina dane do 50 bajtów, zwraca te bajty w buforze i zwraca SQL_SUCCESS_WITH_INFO. Długość bajtu danych wynosi 60 (długość przed obcięciem), a długość bajtu buforu wynosi nadal 50.
Rekord diagnostyczny jest tworzony dla każdej kolumny, która jest obcięta. Ze względu na to, że utworzenie tych rekordów przez sterownik i przetworzenie ich przez aplikację zajmuje trochę czasu, trunkowanie może obniżyć wydajność. Zazwyczaj aplikacja może uniknąć tego problemu, przydzielając wystarczająco duże bufory, chociaż może to nie być możliwe w przypadku pracy z długimi danymi. W przypadku obcinania danych aplikacja może czasami przydzielić większy bufor i ponownie pobrać dane; nie jest to prawdą we wszystkich przypadkach. W przypadku ucięcia podczas pobierania danych z wywołaniami funkcji SQLGetData aplikacja nie musi ponownie wywoływać SQLGetData dla danych, które zostały już zwrócone; aby uzyskać więcej informacji, zobacz Getting Long Data (Uzyskiwanie długich danych).