Udostępnij za pośrednictwem


Kursory API serwera

ODBC, OLE DB a ADO API obsługuje kursory mapowanie nad zestawów wyników wykonanej instrukcji SQL.The Microsoft SQL Server Native Client OLE DB provider and SQL Server Native Client ODBC driver implement these operations through the use of API server cursors.Interfejs API serwera kursory są kursory zaimplementowane na serwerze i zarządzany przez funkcje API kursor.Jak aplikacja wywołuje funkcje API kursor, operacji kursor jest przesyłany do serwera przez sterownik ODBC lub dostawca OLE DB.

Podczas korzystania z kursor serwera interfejsu API w OLE DB, ODBC i ADO, należy użyć funkcji lub metody interfejsu API do:

  1. Otwórz połączenie.

  2. Ustawianie atrybutów lub właściwości określające cechy kursor API automatycznie mapuje nad każdym zestaw wyników.

  3. Wykonaj jedną lub więcej Transact-SQL instrukcji.

  4. Użyj funkcji API lub metody do pobierania wierszy w zestawy wyników.

Kiedy właściwości lub atrybutów kursor API są zestaw domyślne zestawtings, SQL Server macierzystego klienta dostawca OLE DB i SQL Server sterownik ODBC macierzystym klienta za pomocą domyślnego wynik zestaws.Chociaż interfejs API technicznie pyta o kursor, cechy domyślnego kursora odpowiada zachowania domyślny zestaw wyników.dostawca OLE DB i sterownika ODBC, dlatego implementują domyślne opcje kursor za pomocą domyślny zestaw wyników , ponieważ jest najbardziej skuteczny sposób, aby wiersze pobrać z serwera.Podczas korzystania z zestawów wyników domyślnej aplikacji można wykonać wszelkie Transact-SQL instrukcja lub partia, ale może mieć tylko jedną instrukcję oczekujących na połączenie.Oznacza to aplikacja musi przetworzyć lub Anuluj zestawów wyników zwróconych przez jedną instrukcję przed jej wykonać innej instrukcja dla połączenia.

Kiedy właściwości lub atrybutów kursor API są zestaw innych niż domyślne, SQL Server macierzystego klienta dostawca OLE DB i SQL Server sterownik ODBC macierzystym klienta za pomocą interfejsu API serwera kursory zamiast domyślnego wynik zestaws.Każde wywołanie funkcja API, który pobiera wiersze generuje roundtrip do serwera, aby pobrać wiersze z kursor serwera interfejsu API.

Ograniczenia kursor serwera interfejsu API

Aplikacja nie może wykonać następujące instrukcje, korzystając z interfejsu API serwera kursory:

  • Transact-SQLsprawozdania, SQL Server nie obsługuje kursory serwera.

  • Instancje lub procedur przechowywanych, które zwracają kilka zestawów wyników.

  • Wybierz instrukcje, które zawierają klauzule komputerowe, COMPUTE BY, aby PRZEGLĄDAĆ lub INTO.

  • Instrukcja EXECUTE odwołującego się do zdalna procedura składowana.

Implementacja kursor serwera interfejsu API

SQL Server Macierzystego klienta dostawca OLE DB i SQL Server sterownik ODBC macierzystym klienta za pomocą tych specjalnych procedury składowane w systemie operacji kursor sygnału do serwera:

  • sp_cursoropen definiuje instrukcja języka SQL ma być skojarzony z kursora i opcje kursora, a następnie wypełnia się kursor.

  • sp_cursorfetch pobiera wiersz lub blok wierszy z kursor.

  • sp_cursorclose zamyka i zwalnia kursor.

  • sp_cursoroption jest używane do zestaw różne opcje kursor.

  • sp_cursor jest używana do żądania pozycjonowanego aktualizacje.

  • sp_cursorprepare kompiluje Transact-SQL instrukcja lub partia skojarzonych z kursor do planu wykonania, ale nie tworzy kursor.

  • sp_cursorexecute tworzy i wypełnia kursor z planu wykonania, utworzony przez sp_cursorprepare.

  • sp_cursorunprepare odrzuca plan wykonania z sp_cursorprepare.

  • sp_cursorprepexec compiles a plan for the submitted Transact-SQL statement or batch associated with a cursor, creates the cursor, and populates it.sp_cursorprepexec combines the behavior of sp_cursorprepare and sp_cursorexecute.

Te procedury składowane w systemie będą widoczne w SQL Server Profiler ślady ADO i OLE DB ODBC aplikacji korzystających z interfejsu API serwera kursory.Są przeznaczone tylko do użytku wewnętrznego z SQL Server macierzystego klienta dostawca OLE DB i SQL Server sterownik ODBC macierzystym klienta.Pełną funkcjonalność tych procedur jest dostępne dla aplikacji, korzystając z funkcji kursor API bazy danych.Określenie procedur bezpośrednio w aplikacji nie jest obsługiwane.

Gdy SQL Server wykonuje instrukcję dla połączenia, nie występują instrukcje mogą być wykonywane połączenia, dopóki wszystkie wyniki pierwszej instrukcja przetwarzania lub anulowane.Reguła ta nadal obowiązuje podczas korzystania z interfejsu API serwera kursory, ale do aplikacji wygląda jak SQL Server rozpoczął obsługi wielu instrukcji aktywnego połączenia.This is because the full result set is stored in the server cursor and the only statements being transmitted to SQL Server are the executions of the sp_cursor system stored procedures.SQL Server executes the stored procedure, and as soon as the client retrieves the result set it can execute any other statement.Dostawca OLE DB i sterownika ODBC zawsze pobierać wszystkie wyniki z sp_cursor procedura składowana, zanim one zwrócić sterowanie do aplikacji.Dzięki temu aplikacje interleave pobiera przeciwko wielu kursory active server.

W poniższej tabela pokazano, jak aplikacja może przetwarzać dwa kursory w tym samym czas na połączenie przy użyciu dwóch uchwytów instrukcja.

Dojścia instrukcji 1

Dojścia instrukcji 2

Ustaw kursor atrybuty takie, że kursor serwera interfejsu API będą używane.

 

SQLExecDirect instrukcja języka SQL.Wywołania sterownika ODBC sp_cursoropen i pobiera zestaw wyników zwróconej przez procedurę.

 

 

Ustaw kursor atrybuty takie, że kursor serwera interfejsu API będą używane.

 

SQLExecDirect instrukcja języka SQL.Wywołania sterownika ODBC sp_cursoropen i pobiera zestaw wyników zwróconej przez procedurę.

SQLFetchScroll do pobierania pierwszy blok wierszy.Wywołania sterownika sp_cursorfetch a następnie pobierze zestaw wyników zwróconej przez procedurę.

 

 

SQLFetchScroll do pobierania pierwszy blok wierszy.Wywołania sterownika sp_cursorfetch a następnie pobierze zestaw wyników zwróconej przez procedurę.

SQLFetchScroll do pobierania innego blok wierszy.Wywołania sterownika sp_cursorfetch a następnie pobierze zestaw wyników zwróconej przez procedurę.

 

 

SQLFetchScroll do pobierania innego blok wierszy.Wywołania sterownika sp_cursorfetch a następnie pobierze zestaw wyników zwróconej przez procedurę.

Wywołanie SQLFreeStmt lub SQLCloseCursor.Wywołania sterownika sp_cursorclose.

 

 

Wywołanie SQLFreeStmt lub SQLCloseCursor.Wywołania sterownika sp_cursorclose.

Ponieważ żadne wyniki nie są pozostawione oczekujących połączenia po wywołania dowolnej sp_cursor procedura składowana, można wykonywać wiele Transact-SQL sprawozdania dotyczące jednego połączenia, pod warunkiem, że wszystkie wykonać są z interfejsu API serwera kursory.

Określanie serwera API kursory

Poniżej przedstawiono podsumowanie użycia interfejsu API serwera kursory w interfejsów API:

  • OLE DB

    • Otwórz obiekt sesja, otwórz obiekt polecenia i określić tekst polecenia.

    • Ustaw właściwości zestawu zestaw wierszy, takie jak DBPROP_OTHERINSERT, DBPROP_OTHERUPDATEDELETE, DBPROP_OWNINSERT, DBPROP_OWNUDPATEDELETE kontroli zachowania kursor.

    • Wykonanie obiektu polecenie.

    • Pobieranie wierszy w zestaw wyników za pomocą metody takie jak IRowset::GetNextRows, IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsAtBookmark i IRowsetScroll::GetRowsAtRatio.

  • ODBC

    • Otwórz okno połączenia i wywołanie SQLAllocHandle przydzielić dojścia instrukcja.

    • Wywołanie SQLzestawStmtAttr do zestaw SQL_ATTR_CURSOR_TYPE, SQL_ATTR_CONCURRENCY i SQL_ATTR_ROW_ARRAY_SIZE atrybuty.Można też określić zachowania kursor przez ustawianie atrybutów SQL_ATTR_CURSOR_SCROLLABLE i SQL_ATTR_CURSOR_SENSITIVITY.

    • Wykonanie Transact-SQL za pomocą instrukcja SQLExecDirect lub SQLPrepare i SQLExecute.

    • Pobieranie wierszy lub bloki wierszy za pomocą SQLFetch lub SQLFetchScroll.

  • ADO

    • Zdefiniować obiekt połączenia i obiektu Recordset, a następnie wykonać metoda Open obiektu połączenie.

    • Wykonanie metoda Open dotyczące określania obiektu Recordset CursorType lub LockType parametru.

    • Pobrać wiersze przy użyciu metod przenoszenia, MoveFirst, MoveLast, MoveNext i MovePrevious rekordów.

Kursory API serwera i USTAWIĆ opcje

W SQL Server, jeśli wydanych instrukcja pobrania i zmiany do dowolnego z następujących opcji wpływających na plan lub opcje wymagane do widoków indeksowanych lub obliczanych kolumn, zastosowań kursor migawka opcji wartości obowiązują w czas kursor jest otwarty.Wartości te są używane dla wszystkich operacji pobierania kolejnych i zmiany w bieżącym kontekście są ignorowane.

Opcje wpływające na plan

ARITHABORT

NUMERIC_ROUNDABORT

FORCEPLAN

QUOTED_IDENTIFIER

ANSI_NULL_DFLT_ON

ANSI_WARNINGS

SPOWODOWAŁYBY

ANSI_NULLS

CONCAT_NULL_YIELDS_NULL

DATEFIRST

FORMAT DATY

JĘZYK

TEXTSIZE

Widoki indeksowane i kolumny obliczanej

ANSI_NULLS

SPOWODOWAŁYBY

ANSI_WARNINGS

CONCAT_NULL_YIELDS_NULL ARITHABORT (w obszarze zgodność poziom 80 lub niższy)

QUOTED_IDENTIFIER

NUMERIC_ROUNDABORT