Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pytanie brzmi zatem, jak ODBC standaryzuje dostęp do bazy danych? Istnieją dwa wymagania dotyczące architektury:
Aplikacje muszą mieć dostęp do wielu zestawów DBMS przy użyciu tego samego kodu źródłowego bez ponownej kompilacji lub ponownego łączenia.
Aplikacje muszą mieć jednocześnie dostęp do wielu zestawów DBMS.
I jest jeszcze jedno pytanie, ze względu na rzeczywistość platformy handlowej:
- Które funkcje systemu DBMS powinny być uwidaczniane przez funkcję ODBC? Tylko funkcje wspólne dla wszystkich systemów DBMS lub dowolna funkcja dostępna w dowolnym systemie DBMS?
OdBC rozwiązuje te problemy w następujący sposób:
ODBC to interfejs poziomu wywołań. Aby rozwiązać problem dotyczący sposobu, w jaki aplikacje uzyskują dostęp do wielu zestawów DBMS przy użyciu tego samego kodu źródłowego, ODBC definiuje standardowy interfejs wiersza polecenia. Zawiera wszystkie funkcje specyfikacji interfejsu wiersza polecenia z open group i ISO/IEC oraz udostępnia dodatkowe funkcje często wymagane przez aplikacje.
Dla każdego systemu DBMS obsługującego odBC jest wymagana inna biblioteka lub sterownik. Sterownik implementuje funkcje w interfejsie API ODBC. Aby użyć innego sterownika, aplikacja nie musi być ponownie skompilowana ani ponownie połączona. Zamiast tego aplikacja po prostu ładuje nowy sterownik i wywołuje w nim funkcje. Aby uzyskać dostęp do wielu zestawów DBMS jednocześnie, aplikacja ładuje wiele sterowników. Sposób obsługi sterowników jest specyficzny dla systemu operacyjnego. Na przykład w systemie operacyjnym Microsoft Windows sterowniki to biblioteki linków dynamicznych (DLL).
OdBC definiuje standardową gramatykę SQL. Oprócz standardowego interfejsu poziomu wywołań ODBC definiuje standardową gramatykę SQL. Ta gramatyka jest oparta na specyfikacji OPEN Group SQL CAE. Różnice między tymi dwiema gramatykami są niewielkie i wynikają głównie z różnic między gramatyką SQL wymaganą przez osadzony SQL (Open Group) a interfejsem programistycznym (ODBC). Istnieje również kilka rozszerzeń gramatyki, aby uwidocznić powszechnie dostępne funkcje językowe, które nie są objęte gramatyką Open Group.
Aplikacje mogą przesyłać instrukcje przy użyciu gramatyki specyficznej dla ODBC lub DBMS. Jeśli instrukcja używa gramatyki ODBC, która różni się od gramatyki specyficznej dla systemu DBMS, sterownik konwertuje go przed wysłaniem do źródła danych. Jednak takie konwersje są rzadkie, ponieważ większość zestawów DBMS używa już standardowej gramatyki SQL.
ODBC udostępnia Menedżera sterowników do zarządzania równoczesnym dostępem do wielu systemów DBMS. Mimo że użycie sterowników rozwiązuje problem z uzyskiwaniem dostępu do wielu zestawów DBMS jednocześnie, kod do tego może być złożony. Aplikacje przeznaczone do pracy ze wszystkimi sterownikami nie mogą być statycznie połączone z żadnymi sterownikami. Zamiast tego muszą ładować sterowniki w czasie działania i wywoływać w nich funkcje za pomocą tabeli wskaźników funkcji. Sytuacja staje się bardziej złożona, jeśli aplikacja używa wielu sterowników jednocześnie.
Zamiast wymuszać wykonywanie tych czynności przez każdą aplikację, funkcja ODBC udostępnia menedżera sterowników. Menedżer sterowników implementuje wszystkie funkcje ODBC — głównie jako wywołania przekazywane do funkcji ODBC w sterownikach — i jest statycznie połączony z aplikacją lub ładowany przez aplikację w czasie wykonywania. W związku z tym aplikacja wywołuje funkcje ODBC według nazwy w Menedżerze sterowników, a nie przez wskaźnik w każdym sterowniku.
Gdy aplikacja potrzebuje określonego sterownika, najpierw żąda dojścia połączenia, z którym należy zidentyfikować sterownik, a następnie zażąda, aby menedżer sterowników załadował sterownik. Menedżer sterowników ładuje sterownik i przechowuje adres każdej funkcji w sterowniku. Aby wywołać funkcję ODBC w sterowniku, aplikacja wywołuje tę funkcję w Menedżerze sterowników i przekazuje dojście połączenia dla sterownika. Menedżer sterowników wywołuje następnie funkcję przy użyciu adresu, który został zapisany wcześniej.
OdBC uwidacznia znaczną liczbę funkcji systemu DBMS, ale nie wymaga od sterowników obsługi wszystkich z nich. Jeśli ODBC uwidoczniłoby tylko funkcje wspólne dla wszystkich systemów DBMS, byłoby niewielkiej użyteczności; w końcu powodem, dla którego istnieje tak wiele różnych systemów DBMS, jest to, że mają różne funkcje. Jeśli funkcja ODBC uwidoczniła każdą funkcję dostępną w dowolnym systemie DBMS, nie byłoby możliwe zaimplementowanie sterowników.
Zamiast tego odBC uwidacznia znaczną liczbę funkcji — więcej niż są obsługiwane przez większość systemów DBMS — ale wymaga od sterowników zaimplementowania tylko podzbioru tych funkcji. Sterowniki implementują pozostałe funkcje tylko wtedy, gdy są one obsługiwane przez bazowy system DBMS lub jeśli zdecydują się je emulować. W związku z tym aplikacje mogą być napisane w celu wykorzystania funkcji pojedynczego systemu DBMS uwidocznionego przez sterownik dla tego systemu DBMS, do używania tylko tych funkcji używanych przez wszystkie maszyny DBMS lub do sprawdzania obsługi określonej funkcji i odpowiednio reagować.
Aby aplikacja mogła określić, jakie funkcje obsługuje sterownik i system DBMS, funkcja ODBC udostępnia dwie funkcje (SQLGetInfo i SQLGetFunctions), które zwracają ogólne informacje o możliwościach sterownika i dbMS oraz listę funkcji, które obsługuje sterownik. OdBC definiuje również poziomy zgodności interfejsu API i gramatyki SQL, które określają szerokie zakresy funkcji obsługiwanych przez sterownik. Aby uzyskać więcej informacji, zobacz Poziomy zgodności.
Należy pamiętać, że odBC definiuje wspólny interfejs dla wszystkich uwidacznianych funkcji. W związku z tym aplikacje zawierają kod specyficzny dla funkcji, a nie kod specyficzny dla systemu DBMS i mogą używać wszystkich sterowników, które uwidaczniają te funkcje. Jedną z zalet jest to, że aplikacje nie muszą być aktualizowane po ulepszeniu funkcji obsługiwanych przez system DBMS; Zamiast tego po zainstalowaniu zaktualizowanego sterownika aplikacja automatycznie używa funkcji, ponieważ jego kod jest specyficzny dla funkcji, a nie specyficzny dla sterownika lub specyficzny dla systemu DBMS.