Udostępnij przez


Wiele wyników

Wynik jest zwracany przez źródło danych po wykonaniu instrukcji. OdBC ma dwa typy wyników: zestawy wyników i liczby wierszy. Liczby wierszy to liczba wierszy, na które wpływają instrukcje aktualizacji, usuwania lub wstawiania. Zestawy, opisane w Batches of SQL Statements, mogą generować wiele wyników.

W poniższej tabeli wymieniono opcje SQLGetInfo używane przez aplikację w celu określenia, czy źródło danych zwraca wiele wyników dla każdego innego typu partii. W szczególności źródło danych może zwrócić pojedynczą liczbę wierszy dla całej partii instrukcji lub liczbę wierszy dla każdej instrukcji w partii. W przypadku instrukcji generowania zestawu wyników wykonanej z tablicą parametrów źródło danych może zwrócić pojedynczy zestaw wyników dla wszystkich zestawów parametrów lub poszczególnych zestawów wyników dla każdego zestawu parametrów.

Typ partii Liczba wierszy Zestawy wyników
Jawna kolekcja danych SQL_BATCH_ROW_COUNT[a] --[b]
Procedure SQL_BATCH_ROW_COUNT[a] --[b]
Tablice parametrów SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Instrukcje generowania liczby wierszy w partii mogą być obsługiwane, ale zwracanie liczby wierszy nie jest obsługiwane. Opcja SQL_BATCH_SUPPORT w narzędziu SQLGetInfo wskazuje, czy instrukcje generowania liczby wierszy są dozwolone w partiach; opcja SQL_BATCH_ROW_COUNTS wskazuje, czy te liczby wierszy są zwracane do aplikacji.

[b] Jawne pakiety i procedury zawsze zwracają wiele zestawów wyników, gdy zawierają wiele instrukcji, które generują zestawy wyników.

Uwaga / Notatka

Opcja SQL_MULT_RESULT_SETS wprowadzona w wersji ODBC 1.0 zawiera tylko ogólne informacje o tym, czy można zwrócić wiele zestawów wyników. W szczególności jest ustawiane na "Y", jeśli zwracane są bity SQL_BS_SELECT_EXPLICIT lub SQL_BS_SELECT_PROC dla SQL_BATCH_SUPPORT, lub jeśli zwracany jest SQL_PAS_BATCH dla SQL_PARAM_ARRAYS_SELECT.

Aby przetworzyć wiele wyników, aplikacja wywołuje metodę SQLMoreResults. Ta funkcja odrzuca bieżący wynik i udostępnia następny wynik. Zwraca SQL_NO_DATA, gdy nie są dostępne żadne wyniki. Załóżmy na przykład, że następujące instrukcje są wykonywane jako partia:

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

Po wykonaniu tych instrukcji aplikacja pobiera wiersze z zestawu wyników utworzonego przez instrukcję SELECT . Po zakończeniu pobierania wierszy wywołuje SQLMoreResults, aby udostępnić liczbę części, które zostały przekalkulowane. W razie potrzeby funkcja SQLMoreResults odrzuca nie pobrane wiersze i zamyka kursor. Następnie aplikacja wywołuje funkcję SQLRowCount , aby określić, ile części zostało powtórzonych przez instrukcję UPDATE .

To zależy od sterownika, czy cała instrukcja batch jest wykonywana przed udostępnieniem jakichkolwiek wyników. W niektórych implementacjach tak się dzieje; w innych przypadkach wywołanie funkcji SQLMoreResults wyzwala wykonywanie następnej instrukcji w pakiecie.

Jeśli jedna z instrukcji w partii nie powiedzie się, funkcja SQLMoreResults zwróci SQL_ERROR lub SQL_SUCCESS_WITH_INFO. Jeśli partia została przerwana, gdy instrukcja nie powiodła się lub instrukcja failed była ostatnią instrukcją w partii, funkcja SQLMoreResults zwróci SQL_ERROR. Jeśli partia nie została przerwana, gdy instrukcja nie powiodła się, a instrukcja failed nie była ostatnią instrukcją w partii, funkcja SQLMoreResults zwróci SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO wskazuje, że co najmniej jeden zestaw wyników lub liczba została wygenerowana i że partia nie została przerwana.