Udostępnij przez


Przejścia stanu

OdBC definiuje odrębne stany dla każdego środowiska, każdego połączenia i każdej instrukcji. Na przykład środowisko ma trzy możliwe stany: Nieprzydzielone (w którym nie przydzielono środowiska), Przydzielone (w którym środowisko jest przydzielone, ale nie są przydzielane żadne połączenia) i Połączenie (w którym przydzielono środowisko i co najmniej jedno połączenie). Połączenia mają siedem możliwych stanów; wyrażenia mają 13 możliwych stanów.

Konkretny element, zidentyfikowany przez uchwyt, przechodzi z jednego stanu do innego, gdy aplikacja wywołuje określoną funkcję lub funkcje i przekazuje uchwyt do tego elementu. Taki ruch jest nazywany przejściem stanu. Na przykład, przydzielenie dojścia środowiska za pomocą SQLAllocHandle przenosi środowisko ze stanu Nieprzydzielonego do Przydzielonego, a zwolnienie tego uchwytu za pomocą SQLFreeHandle zwraca je ze stanu Przydzielonego do Nieprzydzielonego. ODBC definiuje ograniczoną liczbę przejść stanu prawnego, co jest innym sposobem stwierdzenia, że funkcje muszą być wywoływane w określonej kolejności.

Niektóre funkcje, takie jak SQLGetConnectAttr, nie mają wpływu na stan. Inne funkcje wpływają na stan pojedynczego elementu. Na przykład sqlDisconnect przenosi połączenie ze stanu Połączenia do stanu Przydzielone. Na koniec niektóre funkcje wpływają na stan więcej niż jednego elementu. Na przykład przydzielanie dojścia połączenia za pomocą polecenia SQLAllocHandle przenosi połączenie ze stanu Nieprzydzielonego do stanu Przydzielonego i przenosi środowisko ze stanu Przydzielonego do stanu Połączenia.

Jeśli aplikacja wywołuje funkcję poza kolejnością, funkcja zwraca błąd przejścia stanu. Jeśli na przykład środowisko jest w stanie Połączenie, a aplikacja wywołuje metodę SQLFreeHandle z tym uchwytem środowiska, funkcja SQLFreeHandle zwraca wartość SQLSTATE HY010 (błąd sekwencji funkcji), ponieważ może być wywoływana tylko wtedy, gdy środowisko jest w stanie Przydzielone. Definiując to jako nieprawidłowe przejście stanu, odBC uniemożliwia aplikacji zwalnianie środowiska, gdy istnieją aktywne połączenia.

Niektóre przejścia stanu są nieodłączne w projekcie ODBC. Na przykład nie można przyznać uchwytu połączenia bez uprzedniego przyznania uchwytu środowiska, ponieważ funkcja, która przyznaje uchwyt połączenia, wymaga uchwytu środowiska. Inne przejścia stanu są wymuszane przez Menadżera sterowników i sterowniki. Na przykład sqlExecute wykonuje przygotowaną instrukcję. Jeśli uchwyt instrukcji przekazany do niej nie jest w stanie przygotowania, SQLExecute zwraca wartość SQLSTATE HY010 (błąd sekwencji funkcji).

Z punktu widzenia aplikacji przejścia stanów są zwykle proste: prawidłowe przejścia stanów są zazwyczaj zgodne z naturalnym przepływem dobrze zaprojektowanej aplikacji. Przejścia stanów są bardziej złożone dla menedżera sterowników oraz samych sterowników, ponieważ muszą one śledzić stan środowiska, każdego połączenia i każdej instrukcji. Większość tej pracy jest wykonywana przez Menedżera sterowników; większość pracy, która musi być wykonywana przez sterowniki, występuje z instrukcjami z oczekującymi wynikami.

Części 1 i 2 tego podręcznika ("Wprowadzenie do ODBC" i "Tworzenie aplikacji i sterowników") zwykle nie wspominają jawnie o przejściach stanu. Zamiast tego opisują kolejność wywoływanych funkcji. Na przykład polecenie "Wykonywanie instrukcji" oznacza, że przed wykonaniem instrukcji SQLExecute należy przygotować instrukcję za pomocą narzędzia SQLPrepare. Aby uzyskać pełny opis stanów i przejść stanu, w tym przejścia sprawdzane przez Menedżera sterowników i które muszą być sprawdzane przez sterowniki, zobacz Dodatek B: Tabele przejścia stanu ODBC.