Die Open Database Connectivity (ODBC) Schnittstelle [MS94] erlaubt Applikationsprogrammen den Zugriff auf die Daten eines Datenbankmanagementsystems. Die Schnittstelle wurde 1992 von Microsoft mit der Unterstützung von einigen Datenbankherstellern entwickelt. ODBC setzte sich schnell als Standard durch und ist mittlerweile für die Betriebssysteme Microsoft Windows (95/NT), IBM OS/2, Macintosh OS und Sun Solaris verfügbar. Die Datenbank kann bei dieser Schnittstelle eine einfache Textdatei sein oder aber auch ein vollständiges DBMS in Client/Server-Architektur. Einen Überblick über die Architektur der ODBC-Schnittstelle gibt Abbildung 3.1
Abbildung 3.1: Überblick über die ODBC-Architektur
Die Applikationsprogramme fordern über den ODBC-Treiber-Manager die Dienste eines ODBC-Treibers an. Der ODBC-Treiber-Manager ist ein Bestandteil des Betriebssystems und verwaltet die verschiedenen ODBC-Treiber für das Betriebssystem. Die Treiber stellen Bibliotheken dar, die zur Laufzeit dynamisch geladen werden können. Für jedes Datenformat bzw. DBMS gibt es einen eigenen Treiber, der oft von den Datenbankherstellern zur Verfügung gestellt wird. Über die Programmierschnittstelle des Treiber-Managers stellt die Applikation Anfragen in SQL an ein Datenbanksystem. Der Treiber-Manager leitet die Anfrage an den zuständigen Treiber weiter. Die Treiber setzen dann die SQL-Befehle der Applikation in entsprechende Datenbankbefehle um und berücksichtigen dabei zum Beispiel spezielle SQL-Dialekte. Die einheitliche Schnittstelle ermöglicht die Programmierung einer Anwendung unabhängig von dem benutzten DBMS.
Die Struktur eines Anwendungsprogramms, das die ODBC-Schnittstelle benutzt,
ist ähnlich zu der von Programmen für den Sybase SQL Server: das Anwendungsprogramm
baut die Verbindung zu einem DBMS auf, führt eine Anfrage aus,
verarbeitet die Ergebnisse und beendet die Verbindung.
Die C++-Klassenbibliothek Microsoft Foundation Classes
(MFC)
enthält Klassen
zur Verkapselung dieser Funktionen. Mit der Klasse CDatabase läßt sich
eine Verbindung zu einem DBMS herstellen, die Klasse CRecordset stellt
eine Anfrage an das DBMS und verwaltet die Antwort. Mit einem CRecordset-Objekt
kann man in der Antwortmenge navigieren und einzelne Elemente modifizieren,
falls dies die Form der Anfrage erlaubt.
Das Programm baut die Verbindung zu einem DBMS auf und stellt eine Anfrage, deren Ergebnis in einem Recordset gespeichert wird. Anschließend schreibt das Programm das Ergebnis der Anfrage auf den Bildschirm.
void print_emps() { // Datenbank oeffnen CDatabase db; db.Open("DSN=SybaseSQLServer",FALSE,TRUE,\"ODBC;UID=quix"); // RecordSet initialisieren EmployeeRecordSet rs(&db); rs.Open(CRecordset::snapshot, "Select Name,Salary from Employee where Salary > 100000"); // Ergebnis ausgeben rs.MoveFirst(); while(!rs.IsEOF()) { rs.DoFieldExchange(); cout << rs.name << " verdient " rs.salary << " DM.\n"; rs.MoveNext(); } }Die Klasse EmployeeRecordSet ist von der Klasse CRecordSet abgeleitet. Sie hat zusätzlich noch die Member-Variablen name und salary und überschreibt die Methode DoFieldExchange. In dieser Methode werden die Daten aus einem Record in die Member-Variablen kopiert.
ODBC ist nicht der einzige Standard dieser Art, jedoch findet ODBC eine immer weitere Verbreitung [MMBH95]. Mittlerweile stellen viele Hersteller Werkzeuge zur einfachen Erstellung von ODBC-Applikationen her [Hü95]. Die Werkzeuge erlauben die grafische Entwicklung von Eingabeformularen und die Einbindung in beliebige Applikationsprogramme.
Christoph Quix