Pobieranie danych wynikowych
Aplikacji ODBC oferuje trzy opcje pobierania danych wynikowych.
Pierwsza opcja jest oparta na Procedura SQLBindCol.Przed pobieranie zestaw wyników, aplikacja używa Procedura SQLBindCol do powiązania każdej kolumna w zestaw wyników do zmiennej program.Po powiązane kolumny transfery sterownik danych bieżącego wiersza do zmiennych powiązany wynik ustawić kolumny każdego czas wywołania aplikacji SQLFetch lub SQLFetchScroll.Sterownik obsługuje konwersji danych, jeśli kolumna zestaw wyników i zmiennej programu mają różne typy danych.Jeśli aplikacja ma SQL_ATTR_ROW_ARRAY_SIZE zestaw większa niż 1, go powiązać kolumn wyniku tablice zmiennych, które zostaną wszystkie wprowadzone na każde wywołanie SQLFetchScroll.
Druga opcja jest oparta na Procedura SQLGetData.Aplikacja nie korzysta z Procedura SQLBindCol powiązać zestaw wyników kolumny do zmiennych programu.Po każdym wywołaniu SQLFetch, wywołania aplikacji Procedura SQLGetData raz dla każdej kolumna w zestaw wyników.Procedura SQLGetData nakazuje sterownikowi do przenoszenia danych z kolumna zestaw wyników określonej zmiennej określonego programu i określa typ danych kolumna i zmienna.Pozwala to sterownikowi do konwertowania danych, jeśli wynik kolumna i program zmiennej mają różne typy danych.Tekst, ntext, i obrazu kolumny są zazwyczaj zbyt duży, aby dopasowanie do programu zmiennej, ale mogą nadal być pobierane za pomocą Procedura SQLGetData.Jeśli tekstu, ntext, lub obrazu dane kolumna wynik jest większy niż zmiennej program Procedura SQLGetData zwraca wartość SQL_SUCCESS_WITH_INFO i SQLSTATE 01004 (ciąg danych, prawo obcięte).Kolejne wywołania Procedura SQLGetData zwrotu kolejnych fragmentów tekstu lub obrazu danych.Gdy osiągnięty zostanie koniec danych, Procedura SQLGetData zwraca SQL_SUCCESS.Każdego pobrania zwraca zestaw wierszy lub zestaw wierszy, jeżeli SQL_ATTR_ROW_ARRAY_SIZE jest większa niż 1.Przed użyciem Procedura SQLGetData, należy użyć SQLSetPos określić określonego wiersza w obrębie zestawu zestaw wierszy jako bieżący wiersz.
Trzecia opcja, jest użycie wymieszać z Procedura SQLBindCol i Procedura SQLGetData.Aplikacja może, na przykład powiązać pierwszych dziesięć kolumn zestaw wyników, a następnie, na każde pobranie wywołać Procedura SQLGetData trzy razy, aby pobierać dane z trzech kolumn niezwiązany.To wykorzystania, gdy zestaw wyników zawiera jeden lub więcej tekstu lub obrazu kolumny.
W zależności od opcji kursor dla zestaw wyników, aplikacji można także użyć opcji przewijania z SQLFetchScroll do przewijania wokół zestaw wyników.
Nadmiarowe, korzystanie z Procedura SQLBindCol powiązać zestaw wyników kolumny do zmiennej program jest kosztowne ponieważ Procedura SQLBindCol powoduje, że sterownik ODBC przydzielić pamięci.Gdy powiąże kolumny wyników zmiennej wiążących pozostaje, dopóki albo wywołanie SQLFreeHandle do wolnego dojścia instrukcja lub wywołania SQLFreeStmt z fOption zestaw do SQL_UNBIND.Po zakończeniu instrukcja powiązania nie są automatycznie cofnięte.
Tę logikę umożliwia skutecznego przeciwdziałania wykonywania tej samej instrukcja SELECT z różnymi parametrami.Ponieważ zestaw wyników przechowuje tę samą strukturę, można powiązać zestaw wyników raz, proces wszystkich instrukcji SELECT, następnie wywołać SQLFreeStmt z fOption po ostatnim wykonanie ustawiona na SQL_UNBIND.Nie należy wywoływać Procedura SQLBindCol powiązać kolumn zestaw wyników, bez stawiania pierwszych SQLFreeStmt z fOption ustawiona na SQL_UNBIND, aby zwolnić wszystkie poprzednie powiązania.
Podczas korzystania z Procedura SQLBindCol, można albo powiązanie row-wise lub kolumna-wise.Wiązanie row-Wise jest nieco większa niż kolumna-wise powiązanie.
Można użyć Procedura SQLGetData do pobierania danych na podstawie kolumna po kolumnie zamiast wiązania zestaw wyników kolumn przy użyciu Procedura SQLBindCol.Zestaw wyników zawiera tylko kilka wierszy, za pomocą Procedura SQLGetData zamiast Procedura SQLBindCol jest szybszy; w przeciwnym razie Procedura SQLBindCol zapewnia najlepszą wydajność.Jeśli użytkownik nie zawsze umieszczać dane w ten sam zestaw zmiennych, należy użyć Procedura SQLGetData zamiast stale ponownego wiązania.Można używać tylko Procedura SQLGetData w kolumnach, które są na liście wybierz po wszystkie kolumny są powiązane z Procedura SQLBindCol.Kolumna musi być po każdej kolumny, na których już użyte Procedura SQLGetData.
ODBC funkcje zajmowania przenoszenie danych do lub z programu zmiennych, takich jak Procedura SQLGetData, Procedura SQLBindCol, i SQLBindParameter, obsługuje dane niejawna konwersja typu.Na przykład jeśli aplikacja wiąże kolumna całkowitą zmiennej program ciąg znaków, sterownik automatycznie konwertuje dane z całkowitą znak przed wprowadzeniem go do zmiennej program.
Konwersja danych w aplikacjach należy zminimalizować.Konwersja danych jest wymagane dla przetwarzania przez aplikację, aplikacje należy powiązać kolumn i parametry program zmiennych typu danych.Jeśli dane muszą zostać przekonwertowane z jednego typu do drugiego, jednak jest bardziej wydajne, aby sterownik wykonać konwersję niż w aplikacji. SQL Server Sterownik ODBC macierzystym klienta zwykle tylko przesyła dane bezpośrednio z buforów sieciowych do zmiennych aplikacji.Żądając sterownika, aby wykonać konwersję danych wymusza sterownik buforu danych i użyć cyklów Procesora do konwersji danych.
Zmienne programu powinna być wystarczająco duża, aby pomieścić dane przekazywane z kolumna, z wyjątkiem tekstu, ntext, i obrazu danych.Jeżeli aplikacja próbuje pobrać dane zestaw wyników i umieścić ją w zmiennej, która jest zbyt mały, aby pomieścić partycję, sterownik generuje ostrzeżenie.Wymusza sterownik przydzielić pamięci dla wiadomości i i zarówno trzeba poświęcić CPU aplikacji cykli przetwarzania wiadomości oraz sposób obsługa błędów.Aplikacji należy przydzielić zmiennej wystarczająco duży, aby pomieścić dane są pobierane lub użyć funkcja PODCIĄGU na liście wybierz zmniejszyć rozmiar kolumny w zestaw wyników.
Należy zachować ostrożność podczas korzystania z SQL_C_DEFAULT do określenia typu c zmiennej.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, lub nvarchar kolumna, Unicode, dane są zwracane do aplikacji.Może to powodować różne problemy, jeśli aplikacja ma zostały zakodowane nie obsługuje dane Unicode.Te same typy problemów może występować z uniqueidentifier (SQL_GUID) typ danych.
tekst, ntext, i obrazu danych zazwyczaj jest zbyt duży, aby dopasowanie do zmiennej jednego programu i jest zazwyczaj przetwarzana z Procedura SQLGetData zamiast Procedura SQLBindCol.Podczas używania serwera kursory SQL Server sterownik ODBC macierzystym klienta jest zoptymalizowany do nie transmisji danych dla niezwiązanych tekstu, ntext, lub obrazu kolumn w czas pobrana wiersz.Tekstu, ntext, lub obrazu danych nie jest faktycznie pobrane z serwera do problemów aplikacji Procedura SQLGetData dla kolumna.
Optymalizacja mogą być stosowane do aplikacji tak, aby nie tekstu, ntext, lub obrazu wyświetlane dane, gdy użytkownik jest przewijanie kursor w górę i niedziałający.Po wybraniu wiersza aplikacja może wywołać Procedura SQLGetData do pobrania tekstu, ntext, lub obrazu danych.Oszczędza to przesyłania tekstu, ntext, lub obrazu danych dla pozostałych wierszy nie zaznacza użytkownika i zapisać transmisję bardzo duże ilości danych.