Freigeben über


Verhaltensänderungen und ODBC 3.x-Treiber

Das Umgebungsattribut SQL_ATTR_ODBC_VERSION gibt dem Treiber an, ob er odbc 2.x - oder ODBC 3.x-Verhalten aufweisen muss. Wie das SQL_ATTR_ODBC_VERSION-Umgebungsattribut festgelegt wird, hängt von der Anwendung ab. ODBC 3.x-Anwendungen müssen SQLSetEnvAttr aufrufen, um dieses Attribut festzulegen, nachdem sie SQLAllocHandle aufgerufen haben, um ein Umgebungshandle zuzuweisen, und bevor sie SQLAllocHandle aufrufen, um ein Verbindungshandle zuzuordnen. Wenn dies nicht der Fall ist, gibt der Treiber-Manager SQLSTATE HY010 (Funktionssequenzfehler) für den letzteren Aufruf von SQLAllocHandle zurück.

Hinweis

Weitere Informationen zu Verhaltensänderungen und zur Funktionsweise einer Anwendung finden Sie unter Verhaltensänderungen.

ODBC 2.x-Anwendungen und ODBC 2.x-Anwendungen , die mit den ODBC 3.x-Headerdateien neu kompiliert werden, rufen SQLSetEnvAttr nicht auf. Sie rufen jedoch SQLAllocEnv anstelle von SQLAllocHandle auf, um ein Umgebungshandle zuzuweisen. Wenn die Anwendung sqlAllocEnv im Treiber-Manager aufruft, ruft der Treiber-Manager daher SQLAllocHandle und SQLSetEnvAttr im Treiber auf. Daher können ODBC 3.x-Treiber immer darauf zählen, dass dieses Attribut festgelegt wird.

Wenn eine mit dem ODBC_STD Kompilierungsflag kompilierte standardkonforme Anwendung SQLAllocEnv aufruft (was auftreten kann, weil SQLAllocEnv in ISO nicht veraltet ist), wird der Aufruf SQLAllocHandleStd zur Kompilierzeit zugeordnet. Zur Laufzeit ruft die Anwendung SQLAllocHandleStd auf. Der Treiber-Manager legt das SQL_ATTR_ODBC_VERSION-Umgebungsattribut auf SQL_OV_ODBC3 fest. Ein Aufruf von SQLAllocHandleStd entspricht einem Aufruf von SQLAllocHandle mit einem HandleType von SQL_HANDLE_ENV und einem Aufruf von SQLSetEnvAttr , um SQL_ATTR_ODBC_VERSION auf SQL_OV_ODBC3 festzulegen.

In bestimmten Treiberarchitekturen muss der Treiber je nach Verbindung entweder als ODBC 2.x-Treiber oder als ODBC 3.x-Treiber angezeigt werden. Der Treiber ist in diesem Fall möglicherweise kein Treiber, sondern eine Ebene, die sich zwischen dem Treiber-Manager und einem anderen Treiber befindet. Beispielsweise könnte es einen Treiber imitieren, z. B. ODBC Spy. In einem anderen Beispiel kann es als Gateway fungieren, z. B. EDA/SQL. Um als ODBC 3.x-Treiber zu erscheinen, muss ein solcher Treiber SQLAllocHandle exportieren können und als ODBC 2.x-Treiber angezeigt werden können, muss SQLAllocConnect, SQLAllocEnv und SQLAllocStmt exportieren können. Wenn eine Umgebung, Verbindung oder Anweisung zugeordnet werden soll, überprüft der Treiber-Manager, ob dieser Treiber SQLAllocHandle exportiert. Da der Treiber dies tut, ruft der Treiber-Manager SQLAllocHandle im Treiber auf. Wenn der Treiber mit einem ODBC 2.x-Treiber arbeitet, muss der Treiber den Aufruf von SQLAllocHandle nach Bedarf SQLAllocConnect, SQLAllocEnv oder SQLAllocStmt zuordnen. Es darf auch nichts mit dem SQLSetEnvAttr-Aufruf tun, wenn er sich als ODBC 2.x-Treiber verhält.

In diesem Abschnitt werden die folgenden Themen behandelt: