Udostępnij przez


Rola menedżera sterowników w procesie połączenia

Należy pamiętać, że aplikacje nie powodują bezpośredniego wywoływania funkcji sterowników. Zamiast tego wywołują funkcje Menedżera sterowników o tej samej nazwie, a Menedżer sterowników wywołuje funkcje sterownika. Zwykle dzieje się to niemal natychmiast. Na przykład aplikacja wywołuje element SQLExecute w Menedżerze sterowników, a po kilku kontrolach błędów menedżer sterowników wywołuje element SQLExecute w sterowniku.

Proces połączenia jest inny. Gdy aplikacja wywołuje funkcję SQLAllocHandle z parametrami SQL_HANDLE_ENV i SQL_HANDLE_DBC, funkcja przydziela uchwyty tylko w Menadżerze sterowników. Menedżer sterowników nie wywołuje tej funkcji w sterowniku, ponieważ nie wie, który sterownik wywołać. Podobnie, jeśli aplikacja przekazuje uchwyt do niełączonego połączenia do SQLSetConnectAttr lub SQLGetConnectAttr, tylko Menedżer Sterowników wykonuje tę funkcję. Przechowuje lub pobiera wartość atrybutu z uchwytu połączenia i zwraca wartość SQLSTATE 08003 (Połączenie nie jest otwarte) podczas pobierania wartości atrybutu, który nie został ustawiony i dla którego ODBC nie definiuje wartości domyślnej.

Gdy aplikacja wywołuje program SQLConnect, SQLDriverConnect lub SQLBrowseConnect, menedżer sterowników najpierw określa, który sterownik ma być używany. Następnie sprawdza, czy sterownik jest aktualnie załadowany na połączeniu:

  • Jeśli na połączeniu nie załadowano żadnego sterownika, Menedżer sterowników sprawdza, czy określony sterownik jest ładowany do innego połączenia w tym samym środowisku. Jeśli tak nie jest, Menedżer sterowników ładuje sterownik w połączeniu i wywołuje SQLAllocHandle w sterowniku z opcją SQL_HANDLE_ENV.

    Menedżer sterowników następnie wywołuje SQLAllocHandle w sterowniku z opcją SQL_HANDLE_DBC, niezależnie od tego, czy został właśnie załadowany. Jeśli aplikacja ustawi atrybuty połączenia, menedżer sterowników wywołuje sqlSetConnectAttr w sterowniku; Jeśli wystąpi błąd, funkcja połączenia menedżera sterowników zwraca wartość SQLSTATE IM006 (błąd SQLSetConnectAttr sterownika). Na koniec Menedżer sterowników wywołuje funkcję połączenia w sterowniku.

  • Jeśli określony sterownik jest załadowany na potrzeby połączenia, Menedżer sterowników wywołuje tylko funkcję połączenia w sterowniku. W takim przypadku sterownik musi upewnić się, że wszystkie atrybuty połączenia w połączeniu zachowują bieżące ustawienia.

  • Jeśli na połączeniu zostanie załadowany inny sterownik, menedżer sterowników wywołuje metodę SQLFreeHandle w sterowniku, aby zwolnić połączenie. Jeśli nie ma innych połączeń używających sterownika, menedżer sterowników wywołuje sqlFreeHandle w sterowniku, aby zwolnić środowisko i zwolni sterownik. Menedżer sterowników wykonuje wtedy te same operacje, jak wtedy, gdy sterownik nie jest załadowany do połączenia.

Menedżer sterowników zablokuje uchwyt środowiska (henv) przed wywołaniem sterownika SQLAllocHandle i SQLFreeHandle gdy właściwość HandleType jest ustawiona na SQL_HANDLE_DBC.

Gdy aplikacja wywołuje program SQLDisconnect, menedżer sterowników wywołuje program SQLDisconnect w sterowniku. Jednak pozostawia on sterownik załadowany w przypadku ponownego nawiązania połączenia aplikacji ze sterownikiem. Gdy aplikacja wywołuje sqlFreeHandle z opcją SQL_HANDLE_DBC, menedżer sterowników wywołuje sqlFreeHandle w sterowniku. Jeśli sterownik nie jest używany przez żadne inne połączenia, Menedżer sterowników wywołuje sqlFreeHandle w sterowniku z opcją SQL_HANDLE_ENV i zwalnia sterownik.