Szybkie kursory Forward-Only (ODBC)

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Po połączeniu z instancją SQL Server, sterownik ODBC SQL Server Native Client obsługuje optymalizację wydajności dla kursorów tylko do przodu i do odczytu. Kursory tylko przewijania do przodu są implementowane wewnętrznie przez sterownik i serwer w sposób bardzo podobny do domyślnych zestawów wyników. Poza wysoką wydajnością, kursory tylko do przewijania do przodu mają także następujące cechy:

  • SQLGetData nie jest obsługiwany. Kolumny zestawu wyników muszą być powiązane ze zmiennymi programowymi.

  • Serwer automatycznie zamyka kursor, gdy wykryto jego koniec. Aplikacja musi nadal wywoływać SQLCloseCursor lub SQLFreeStmt(SQL_CLOSE), ale sterownik nie musi wysyłać żądania zamknięcia do serwera. To oszczędza podróż w obie strony przez sieć do serwera.

Aplikacja prosi o kursory tylko przewijania do przodu, używając atrybutu instrukcji specyficznego dla sterownika SQL_SOPT_SS_CURSOR_OPTIONS. Po ustawieniu na SQL_CO_FFO kursory tylko przewijania do przodu są włączone bez automatycznego pobierania. Po ustawieniu na SQL_CO_FFO_AF opcja automatycznego pobierania jest również włączona. Więcej informacji o autofetch można znaleźć w artykule Using Autofetch with ODBC Cursors.

Kursory tylko przewijania do przodu z automatycznym pobieraniem mogą być używane do pobrania niewielkiego zestawu wyników przy jednej podróży do serwera w obie strony. W tych krokach n to liczba wierszy, które mają zostać zwrócone:

  1. Ustaw SQL_SOPT_SS_CURSOR_OPTIONS na SQL_CO_FFO_AF.

  2. Ustaw SQL_ATTR_ROW_ARRAY_SIZE na n + 1.

  3. Przypisz kolumny wyników do tablic o n + 1 elementach (dla bezpieczeństwa, jeśli faktycznie pobierane są n + 1 wierszy).

  4. Otwórz kursor za pomocą SQLExecDirect lub SQLExecute.

  5. Jeśli status zwrotu jest SQL_SUCCESS, wywołaj SQLFreeStmt lub SQLCloseCursor , aby zamknąć kursor. Wszystkie dane dla wierszy będą znajdować się w powiązanych zmiennych programowych.

W tych krokach SQLExecDirect lub SQLExecute wysyła żądanie otwarcia kursora z włączoną opcją automatycznego pobierania. Na to pojedyncze żądanie od klienta serwer:

  • Otwiera kursor.

  • Buduje zbiór wyników i wysyła wiersze do klienta.

  • Ponieważ rozmiar wiersza został ustawiony na 1 więcej niż liczba wierszy w zestawie wyników, serwer wykrywa koniec kursora i zamyka kursor.