Udostępnij za pośrednictwem


Za pomocą IMultipleResults procesu wiele zestawów wyników

Użyj konsumentów IMultipleResults Interfejs przetworzenia wyniki zwróconych przez SQL Server Macierzysta wykonywania polecenia dostawca klient OLE DB. Gdy SQL Server Polecenie do wykonania, przesyła macierzystego dostawca klient OLE DB SQL Server wykonuje oświadczeń i zwraca żadnych wyniki.

Klient musi przetwarzają wszystkich wyniki wykonania polecenia.Ponieważ SQL Server Macierzysty wykonywania polecenia dostawca klient OLE DB można wygenerować zestawu zestaw wierszy wielu obiektów jako wyniki, należy użyć IMultipleResults interfejs, aby zapewnić, że pobieranie danych aplikacji kończy podróży round zainicjowane przez klient.

Poniżej Transact-SQL instrukcja generuje wiele zestawów wierszy, wiersza zawierającego dane z SzczegółyZamówienia tabela i niektóre wyniki zawierające klauzula COMPUTE BY:

SELECT OrderID, FullPrice = (UnitPrice * Quantity), Discount,
    Discounted = UnitPrice * (1 - Discount) * Quantity
FROM OrderDetails
ORDER BY OrderID
COMPUTE
    SUM(UnitPrice * Quantity), SUM(UnitPrice * (1 - Discount) * Quantity)
    BY OrderID

Jeśli klient wykonuje polecenie zawierające ten tekst i żąda zestaw wierszy jako interfejs zwróconych wyniki, zwracany jest tylko pierwszego zestaw wierszy.Konsument może przetwarzać wszystkie wiersze w zestawie zestaw wierszy zwracanych.Jednak, jeśli ma wartość właściwość urządzenie źródłowe danych DBPROP_MULTIPLECONNECTIONS VARIANT_FALSE i MARS nie jest włączona dla połączenia, nie inne polecenia mogą być wykonywane na obiekt sesja ( SQL Server Macierzysta klient OLE DB dostawca nie utworzy innego połączenia) do momentu polecenie zostało anulowane. Jeśli nie włączono MARS w danym połączeniu SQL Server Macierzystego dostawca klient OLE DB zwraca błąd DB_E_OBJECTOPEN, jeśli DBPROP_MULTIPLECONNECTIONS jest VARIANT_FALSE i zwraca E_FAIL, jeśli nie ma aktywnej transakcji.

The SQL Server Native klient OLE DB dostawca will also return DB_E_OBJECTOPEN when using streamed output parameters and the application has not consumed all the returned output parameter values before calling IMultipleResults::GetResults to get the next result zestaw.Jeśli serwer MARS nie jest włączona, połączenie jest zajęte, polecenia, które nie produkuje zestaw wierszy lub daje zestaw wierszy, która nie jest kursor serwera, a właściwość DBPROP_MULTIPLECONNECTIONS danych źródłowych jest ustawiona na VARIANT_TRUE, SQL Server Macierzystego dostawca klient OLE DB tworzy dodatkowe połączenia do obsługi obiektów jednocześnie poleceń, chyba że transakcja jest aktywna, w tym przypadek go zwraca błąd. Zarządza transakcji i blokowania SQL Server na podstawie na połączenie. Drugie połączenie jest generowany, polecenie w oddzielnych połączeń nie udostępnia blokad.Należy uważać, aby zapewnić, że jedno polecenie nie blokuje innym przytrzymując blokad w wierszach wymagane przez inne polecenie.Po włączeniu MARS wiele poleceń może być aktywne dla połączeń i jeśli są używane jawne transakcji wszystkich poleceń Udostępnianie wspólnych transakcji.

Konsument może anulować polecenie albo za pomocą ISSAbort::Abort lub zwalniając wszystkie odniesienia przechowywanych dla obiektu polecenia i pochodny zestawu zestaw wierszy.

Za pomocą IMultipleResults we wszystkich wystąpieniach umożliwia konsumenta uzyskać wszystkie zestawy wierszy wygenerowanych przez wykonanie polecenia oraz umożliwia konsumentom odpowiednio ustalić, kiedy należy anulować wykonanie poleceń i zwolnić obiektu sesja do użytku przez inne polecenia.

Uwaga

When you use SQL Server cursors, command execution creates the cursor.SQL Server returns success or failure on the cursor creation; therefore, the round trip to the instance of SQL Server is complete upon the return from command execution.Każdy GetNextRows wywołanie staje się podróży round.W ten sposób wiele obiektów polecenie active może istnieć, każdy zestaw wierszy, która jest wynikiem pobranie z serwera kursor przetwarzania.Aby uzyskać więcej informacji zobacz Zestawy wierszy i programu SQL Server kursory.

See Also

Concepts