Trwa pobieranie danych wyników
Aplikacji ODBC oferuje trzy opcje pobierania danych wynikowych.
Pierwsza opcja opiera się na SQLBindCol.Przed ustawieniem pobieranie wynik używane przez aplikację SQLBindCol powiązać każdego kolumna w wyniku wartość zmiennej programu.Po kolumny mają zostały powiązane, sterownik przesyła dane z bieżącego wiersza do zmiennych, związany z zestaw wyników kolumny każdego czas wywołania aplikacji SQLFetch or SQLFetchScroll.Sterownik obsługi danych podczas konwersji, jeśli zestaw wyników, kolumna i zmiennej programu są różnych typów danych.Jeśli aplikacja ma SQL_ATTR_ROW_ARRAY_SIZE zestaw większa niż 1, można ją powiązać kolumn z wynikami tablic zmiennych, które zostaną wszystkie wprowadzone na każde wywołanie SQLFetchScroll.
Druga opcja opiera się na SQLGetData.Aplikacja nie używa. SQLBindCol powiązać zestaw wyników kolumn do zmiennych programu.Po każdym wywołaniu SQLFetch, aplikacja ta wywołuje SQLGetData tylko jeden raz dla każdej kolumna, w wyniku zestaw.SQLGetData powoduje, że sterownik do transferu danych z kolumna zestaw wyników określonej zmiennej określony program i określa typy danych kolumn i zmiennej.Dzięki temu sterownika do konwertowania danych, jeśli zmienna kolumna i program wynik różnych typów danych.Tekst, ntext, and obraz kolumny są zazwyczaj zbyt duże, aby zmieścić się do zmiennej program, ale nadal mogą być pobierane za pomocą SQLGetData.Jeśli tekst, ntext, or obraz danych kolumna wynik jest większy niż program zmiennej, SQLGetData zwraca SQL_SUCCESS_WITH_INFO i SQLSTATE 01004 (dane ciąg obcięta po prawej).Kolejne wywołania SQLGetData zwrotu kolejnych fragmentów tekst or obraz dane.Po osiągnięciu końca danych SQLGetData zwraca SQL_SUCCESS.Każdy pobranie zwraca zestaw wierszy lub zestaw wierszy, jeżeli SQL_ATTR_ROW_ARRAY_SIZE jest większa niż 1.Przed użyciem SQLGetData, należy najpierw użyć SQLSetPos , aby określić określonego wiersza w zestawie zestaw wierszy w bieżącym wierszu.
Trzecia opcja, jest użycie kombinację SQLBindCol and SQLGetData.Aplikacja może, na przykład powiązać pierwszych dziesięć kolumn zestaw wyników, a następnie, na każdego pobrania, należy wywołać SQLGetData trzy razy do pobierania danych z trzech kolumn niezwiązany.Ten będzie zazwyczaj jest używany podczas zestaw wyników zawiera jeden lub więcej tekst or obraz kolumny.
W zależności od opcji kursor dla zestaw wyników aplikacji, można użyć opcji przewijania SQLFetchScroll , aby przewinąć o całym zestawie wyników.
Nadmierne wykorzystanie SQLBindCol powiązać kolumna zestaw wyników do zmiennej, program jest kosztowne ponieważ SQLBindCol powoduje, że sterownik ODBC przydzielić pamięci.Gdy powiąże się kolumnie wynik do zmiennej, tego wiązania pozostają w mocy, dopóki albo zadzwoń SQLFreeHandle , aby zwolnić w instrukcja obsługi lub zadzwoń SQLFreeStmt with fOption ustawić SQL_UNBIND.Po zakończeniu instrukcja powiązania nie są automatycznie cofane.
Logika ta pozwala na efektywne zajmuje się wykonywania tej samej instrukcja SELECT z różnymi parametrami.Ponieważ zestaw wyników zachowuje taką samą strukturę, można powiązać raz w zestawie wyników, przetwarzanie wszystkich instrukcji SELECT, następnie wywołać SQLFreeStmt with fOption ustawić SQL_UNBIND po wykonaniu ostatniego.Nie należy wywołać SQLBindCol powiązać kolumn zestaw wyników, bez pierwszego wywołania SQLFreeStmt with fOption ustawić SQL_UNBIND, aby zwolnić wszystkie poprzednie powiązania.
Podczas korzystania z SQLBindCol, można albo row-wise lub kolumna-wise wiązanie.wiązanie row-Wise jest trochę szybszy od kolumna-wise wiązanie.
Można użyć SQLGetData do pobierania danych na podstawie kolumna po kolumnie zamiast wiązania wynik Ustawianie kolumn przy użyciu SQLBindCol.Jeśli zestaw wyników zawiera tylko kilka wierszy, przy użyciu SQLGetData zamiast SQLBindCol jest szybszy; w przeciwnym razie SQLBindCol zapewnia uzyskanie największej wydajności.Jeśli użytkownik nie należy zawsze umieszczać dane w ten sam zestaw zmiennych, należy użyć SQLGetData zamiast stale ponownego wiązania.Można używać tylko SQLGetData na kolumny, które są na liście select po wszystkich kolumnach są powiązane z SQLBindCol.kolumna muszą pojawiać się również po każdej kolumna, na którym już używano SQLGetData.
Funkcji ODBC, który zajmuje się przenoszenie danych do lub z programów zmiennych, takich jak SQLGetData, SQLBindCol, and SQLBindParameter, konwersja typu danych niejawna pomocy technicznej.Na przykład jeśli aplikacji wiąże kolumna liczb całkowitych ze zmienną program ciąg znaków, sterownik automatycznie konwertuje dane z całkowitą znak przed wprowadzeniem go do zmiennej program.
Konwersja danych w aplikacji powinien zostać zminimalizowane.Konwersja danych jest wymagana do przetwarzania przez aplikację, aplikacje należy powiązać kolumny oraz parametry program zmiennych o takim samym typie danych.Jeśli dane musi zostać przekonwertowana z jednego typu do drugiego, jednak jest bardziej efektywne, aby sterownik, należy wykonać konwersję, niż to zrobić w aplikacji.The SQL Server Native klient ODBC driver normally just transfers data directly from the network buffers to the variables of the application. Żądając sterownika, aby wykonać konwersję danych wymusza sterownik buforowane dane i użyć cyklów PROCESORA do konwersji danych.
Zmienne program powinien być wystarczająco duży, aby pomieścić dane przesyłane w z kolumna, z wyjątkiem tekst, ntext, and obraz dane.Jeżeli aplikacja próbuje pobrać dane z zestaw wyników i umieścić ją w zmiennej, która jest zbyt mały, aby pomieścić partycję, sterownik wygeneruje ostrzeżenie.Wymusza to sterownik przydzielić pamięci dla tej wiadomości i i aplikacji, zarówno trzeba poświęcić PROCESORA cykli przetwarzanie wiadomości i sposób obsługa błędów.Aplikacja powinna przydzielenia zmiennej wystarczająco duży, aby pomieścić dane są pobierane lub zmniejszyć rozmiar kolumn zestaw wyników należy użyć funkcja SUBSTRING na liście select.
Należy zachować ostrożność podczas używania SQL_C_DEFAULT do określania typu zmiennej C.SQL_C_DEFAULT Określa, że typ zmiennej C zgodny typ danych SQL, kolumna lub parametru.Jeśli określono SQL_C_DEFAULT ntext, nchar, or nvarchar kolumna, danych Unicode są zwracane do aplikacji.Może to spowodować różne problemy, jeśli nie ma już kodowane jako aplikacji do obsługi danych Unicode.Te same typy problemów może występować z Uniqueidentifier Typ danych (SQL_GUID).
tekst, ntext, and obraz danych zazwyczaj jest zbyt duży, aby zmieścić się do zmiennej jednego programu i zazwyczaj jest przetwarzane z SQLGetData zamiast SQLBindCol.Podczas korzystania z kursorów serwera SQL Server Macierzysty sterownik ODBC klient jest zoptymalizowany do nie transmisji danych dla niezwiązanych tekst, ntext, or obraz kolumn w czasie pobrania wiersza.The text, ntext, or image data is not actually retrieved from the server until the application issues SQLGetData for the kolumna.
Optymalizacja mogą być stosowane do aplikacji, aby nie tekst, ntext, or obraz dane są wyświetlane, gdy użytkownik jest przewijanie kursor w górę i niedziałający.Po zaznaczeniu przez użytkownika wiersza, aplikacja może wywołać SQLGetData pobraćtekst, ntext, or obraz dane.Spowoduje to zapisanie przekazywania tekst, ntext, or obraz danych dla każdego z wierszy użytkownik nie zaznacza i mogą zapisywać przekazywania bardzo duże ilości danych.