Statusübergänge
ODBC definiert diskrete Zustände für jede Umgebung, jede Verbindung und jede Anweisung. Die Umgebung verfügt beispielsweise über drei mögliche Zustände: "Nicht zugewiesen" (in dem keine Umgebung zugeordnet ist), "Zugewiesen" (in der eine Umgebung zugewiesen wird, aber keine Verbindungen zugeordnet werden) und Verbinden ion (in denen eine Umgebung und eine oder mehrere Verbindungen zugeordnet werden). Verbinden ionen verfügen über sieben mögliche Zustände; Aussagen haben 13 mögliche Zustände.
Ein bestimmtes Element, das durch seinen Handle identifiziert wird, wechselt von einem Zustand in einen anderen, wenn die Anwendung eine bestimmte Funktion oder Funktion aufruft und das Handle an dieses Element übergibt. Diese Bewegung wird als Zustandsübergang bezeichnet. Beispielsweise verschiebt das Zuweisen eines Umgebungshandles mit SQLAllocHandle die Umgebung von "Nicht zugewiesen" in "Zugewiesen", und das Freigeben dieses Handles mit SQLFreeHandle gibt sie von "Zugewiesen" in "Nicht zugewiesen" zurück. ODBC definiert eine begrenzte Anzahl von Rechtsstatusübergängen. Dies ist eine andere Möglichkeit, zu sagen, dass Funktionen in einer bestimmten Reihenfolge aufgerufen werden müssen.
Einige Funktionen, z. B. SQLGet Verbinden Attr, wirken sich überhaupt nicht auf den Zustand aus. Andere Funktionen wirken sich auf den Zustand eines einzelnen Elements aus. Beispielsweise verschiebt SQLDisconnect eine Verbindung aus einem Verbinden ion-Zustand in einen zugewiesenen Zustand. Schließlich wirken sich einige Funktionen auf den Zustand von mehr als einem Element aus. Beispielsweise verschiebt das Zuweisen eines Verbindungshandles mit SQLAllocHandle eine Verbindung von einem nicht zugeordneten Zustand in einen zugewiesenen Zustand und verschiebt die Umgebung aus einem zugeordneten Zustand in einen Verbinden ion-Zustand.
Wenn eine Anwendung eine Funktion außerhalb der Reihenfolge aufruft, gibt die Funktion einen Zustandsübergangsfehler zurück. Wenn sich beispielsweise eine Umgebung in einem Verbinden ion-Zustand befindet und die Anwendung SQLFreeHandle mit diesem Umgebungshandle aufruft, gibt SQLFreeHandle SQLSTATE HY010 (Funktionssequenzfehler) zurück, da sie nur aufgerufen werden kann, wenn sich die Umgebung in einem zugewiesenen Zustand befindet. Durch die Definition als ungültiger Zustandsübergang verhindert ODBC, dass die Anwendung die Umgebung freigibt, während aktive Verbindungen vorhanden sind.
Einige Zustandsübergänge sind im Entwurf von ODBC inhärent. Beispielsweise ist es nicht möglich, ein Verbindungshandle zuzuweisen, ohne zuerst ein Umgebungshandle zuzuweisen, da die Funktion, die ein Verbindungshandle zuweist, ein Umgebungshandle erfordert. Andere Zustandsübergänge werden vom Treiber-Manager und den Treibern erzwungen. Beispielsweise führt SQLExecute eine vorbereitete Anweisung aus. Wenn sich das an sie übergebene Anweisungshandle nicht in einem Prepared-Zustand befindet, gibt SQLExecute SQLSTATE HY010 (Funktionssequenzfehler) zurück.
Aus Sicht der Anwendung sind Zustandsübergänge in der Regel einfach: Rechtszustandsübergänge gehen in der Regel hand in Hand mit dem Fluss einer gut geschriebenen Anwendung. Statusübergänge sind für den Treiber-Manager und die Treiber komplexer, da sie den Zustand der Umgebung, jede Verbindung und jede Anweisung nachverfolgen müssen. Die meisten dieser Arbeiten werden vom Fahrermanager geleistet; Der Großteil der Arbeit, die von Treibern ausgeführt werden muss, erfolgt mit Anweisungen mit ausstehenden Ergebnissen.
Teile 1 und 2 dieses Handbuchs ("Einführung in ODBC" und "Entwickeln von Anwendungen und Treibern") neigen dazu, nicht explizit Erwähnung Zustandsübergänge zu Erwähnung. Stattdessen beschreiben sie die Reihenfolge, in der Funktionen aufgerufen werden müssen. Beispielsweise gibt "Executing Statements" an, dass eine Anweisung mit SQLPrepare vorbereitet werden muss, bevor sie mit SQLExecute ausgeführt werden kann. Eine vollständige Beschreibung der Zustände und Zustandsübergänge, einschließlich der vom Treiber-Manager überprüften Übergänge, die von Treibern überprüft werden müssen, finden Sie in Anhang B: ODBC-Statusübergangstabellen.