Udostępnij przez


Wywołanie procedura przechowywana (OLE DB)

Procedura przechowywana może mieć zero lub więcej parametrów.Mogą również zwracać wartość.Podczas korzystania z SQL Server Macierzysta klient OLE DB, mogą być przekazywane parametry procedura przechowywana:

  • trwałe kodowanie wartości danych.

  • Należy określić parametry, powiązać zmiennej program znacznik parametru, a następnie umieść wartości danych w zmiennej program przy użyciu znacznik parametru (?).

Uwaga

Podczas wywoływania SQL Server procedury przechowywane przy użyciu parametrów nazwanych z OLE DB, nazwy parametrów musi zaczynać się od znaku '@'. Jest to SQL Server określone ograniczenie. The SQL Server Native klient OLE DB dostawca enforces this restriction more strictly than MDAC.

Aby obsługiwać parametry, ICommandWithParameters interfejs jest narażony na obiektu polecenia.Aby korzystać z parametrów, konsument najpierw opisano parametry do dostawca na wywołując ICommandWithParameters::SetParameterInfo metody (lub opcjonalnie przygotowuje wywołującego instrukcję, która wywołuje GetParameterInfo Metoda). Konsument tworzy akcesora, który określa strukturę buforu i umieszcza w tym buforze wartości parametrów.Wreszcie przekazaniem uchwyt metoda dostępu i wskaźnik do buforu do wykonać.W przypadku późniejszego wywołania wykonać, konsument umieszcza nowe wartości parametrów w buforze i wywołań wykonać metoda dostępu wskaźnika dojścia i buforu.

Najpierw wywołaj wywołuje tymczasową procedura przechowywana przy użyciu parametrów wiersza polecenia ICommandWithParameters::SetParameterInfo , aby zdefiniować parametry, polecenie może być pomyślnie przygotowany.Dzieje się tak, ponieważ wewnętrzny nazwę tymczasową procedura przechowywana różni się od zewnętrznego nazwa używana przez klient i SQLOLEDB nie można zbadać tabele systemowe, aby określić informacje o parametrach procedura przechowywana tymczasowo.

Poniżej przedstawiono kroki w procesie wiązanie parametrów:

  1. Wypełnij pola informacji o parametr Tablica struktur DBPARAMBINDINFO; oznacza to, nazwę parametru, nazwa specyficznym dla dostawca dla typu danych parametru lub nazwę typu danych standardowych i tak dalej.Każda struktura w tablicy opisuje jeden parametr.Ta tablica jest następnie przekazywany do SetParameterInfo metoda.

  2. Wywołanie ICommandWithParameters::SetParameterInfo metoda do opisania parametrów do dostawca.SetParameterInfo określa macierzystego typu danych każdego parametru.SetParameterInfo argumentów:

    • Liczba parametrów, dla którego ma być zestaw wpisz informacje.

    • Tablica parametru liczby porządkowe, dla którego należy ustawić informacje o typie.

    • Tablica struktur DBPARAMBINDINFO.

  3. Tworzenie metoda dostępu parametru za pomocą IAccessor::CreateAccessor polecenia.metoda dostępu określa strukturę buforu i umieszcza wartości parametrów w buforze.The CreateAccessor command creates an metoda dostępu from a zestaw of bindings.Te powiązania są opisane przez konsumenta przy użyciu tablicy DBBINDING struktur.Każde wiązanie kojarzy jeden parametr do buforu konsumenta i zawiera informacje, takie jak:

    • Liczba porządkowa parametru, do których stosuje się wiązanie.

    • Co to jest powiązany (wartości danych, długość i jego stan).

    • Przesunięcie w buforze na każdej z tych części.

    • Długość i typ wartości danych w postaci, w jakiej występuje w buforze klienta.

    metoda dostępu jest identyfikowany za pomocą uchwytu, typu HACCESSOR.Ten uchwyt jest zwracany przez CreateAccessor metoda.Za każdym razem, gdy konsumenta zakończy się za pomocą akcesora, konsument musi wywołać ReleaseAccessor metoda, aby zwolnić pamięć, którą przechowuje.

    Jeżeli konsument wywołuje metodę, takich jak ICommand::wykonać, przekazaniem dojścia do metoda dostępu i wskaźnik do buforu, sam.Dostawca używa tej metoda dostępu, aby określić sposób transferu danych znajdujących się w buforze.

  4. Wypełnij struktury DBPARAMS.Zmienne konsumenta z parametr wejściowy, którego wartości są pobierane i do parametru wyjściowego, których wartości są zapisywane są przekazywane w czasie wykonywania ICommand::wykonać w strukturze DBPARAMS.Struktura DBPARAMS zawiera trzy elementy:

    • Wskaźnik do buforu, z którego dostawca pobiera dane parametr wejściowy i do którego dostawca zwraca wyprowadzanie danych parametru, zgodnie z określonego przez dojście metoda dostępu powiązań.

    • Liczba zestawów parametrów w buforze.

    • Dojście metoda dostępu utworzony w kroku 3.

  5. wykonać polecenia przy użyciu ICommand::wykonać.

Metody wywoływania procedura przechowywana

Podczas wykonywania procedura przechowywana w SQL Server, SQL Server Macierzysta obsługa dostawca klient OLE DB:

  • ODBC CALL sekwencji unikowej.

  • Procedura zdalnego wywołania (procedur RPC) sekwencji unikowej.

  • Transact-SQL Instrukcja wykonać.

Sekwencję Escape Wywołaj ODBC

Jeśli znasz informacje o parametrach wywołania ICommandWithParameters::SetParameterInfo metoda do opisania parametrów do dostawca.W przeciwnym razie użyto składni ODBC CALL w wywołaniu procedura przechowywana przez dostawca wywołuje funkcja pomocnika, aby znaleźć informacje o parametrach procedura przechowywana.

W przypadku braku pewności parametry (parametr metadane), zaleca się składni ODBC CALL.

Ogólna składnia wywołania procedury przy użyciu sekwencji unikowej ODBC CALL jest:

{[?=]callprocedure_name[([parameter][,[parameter]]...)]}

Na przykład:

{call SalesByCategory('Produce', '1995')}

Sekwencję escape RPC

Sekwencji unikowej RPC jest podobna do składni ODBC CALL Wywołuje procedura przechowywana.Jeśli procedura zostanie wywołana wiele razy, sekwencji unikowej RPC zapewnia optymalną wydajność większość spośród trzech metod wywołania procedura przechowywana.

Kiedy sekwencji unikowej RPC jest używany do wykonać procedura przechowywana, dostawca nie będzie wywoływał dowolnej funkcja pomocnika, aby określić informacje o parametrach (jak to się dzieje przypadek braku składni ODBC CALL).Składnia RPC jest łatwiejsze niż składni ODBC CALL, polecenie jest analizowany szybciej i zwiększania wydajności.W takim przypadek należy podać informacje o parametrach przez ICommandWithParameters::SetParameterInfo.

Sekwencji unikowej RPC wymaga wartości zwracanej.Jeśli procedura przechowywana nie zwraca wartość, serwer zwraca wartość 0 domyślnie.Ponadto nie można otworzyć SQL Server Umieść kursor w procedurze przechowywanej. Procedura przechowywana jest gotowa niejawnie i wywołanie ICommandPrepare::Prepare nie powiedzie się.Ze względu na brak możliwości przygotować wywołanie RPC nie może zbadać metadane kolumna; IColumnsInfo::GetColumnInfo i IColumnsRowset::GetColumnsRowset zwróci DB_E_NOTPREPARED.

Jeśli znasz wszystkie metadane parametrów sekwencji unikowej RPC jest zalecanym sposobem wykonywania procedur przechowywanych.

Jest to przykład sekwencji unikowej RPC do wywoływania procedura przechowywana:

{rpc SalesByCategory}

Przykładowej aplikacji, które sekwencji unikowej RPC zobacz Readme_Stored Procedure Using RPC Syntax (OLE DB).

Instrukcja wykonać języka Transact-SQL

Preferowanej metody wywoływania procedura przechowywana są sekwencji unikowej ODBC CALL i sekwencji unikowej RPC a nie wykonać instrukcja.The SQL Server Native klient OLE DB dostawca uses the RPC mechanism of SQL Server to optimize command processing. Ten protokół RPC zwiększa wydajność dzięki wyeliminowaniu wiele parametrów przetwarzania i analizowania składni instrukcja na serwerze.

This is an example of the Transact-SQLEXECUTE statement:

EXECUTE SalesByCategory 'Produce', '1995'

See Also

Other Resources