Changements de comportement et pilotes ODBC 3.x
L’attribut d’environnement SQL_ATTR_ODBC_VERSION indique au pilote s’il doit présenter le comportement ODBC 2.x ou ODBC 3.x . La façon dont l’attribut d’environnement SQL_ATTR_ODBC_VERSION est défini dépend de l’application. Les applications ODBC 3.x doivent appeler SQLSetEnvAttr pour définir cet attribut après avoir appelé SQLAllocHandle pour allouer un handle d’environnement et avant d’appeler SQLAllocHandle pour allouer un handle de connexion. S’il ne parvient pas à le faire, le Gestionnaire de pilotes renvoie SQLSTATE HY010 (erreur de séquence de fonction) sur le dernier appel à SQLAllocHandle.
Notes
Pour plus d’informations sur les changements de comportement et sur le comportement d’une application, consultez Modifications comportementales.
Les applications ODBC 2.x et les applications ODBC 2.x recompilées avec les fichiers d’en-tête ODBC 3.x n’appellent pas SQLSetEnvAttr. Toutefois, ils appellent SQLAllocEnv au lieu de SQLAllocHandle pour allouer un handle d’environnement. Par conséquent, lorsque l’application appelle SQLAllocEnv dans le Gestionnaire de pilotes, le Gestionnaire de pilotes appelle SQLAllocHandle et SQLSetEnvAttr dans le pilote. Ainsi, les pilotes ODBC 3.x peuvent toujours compter sur cet attribut défini.
Si une application conforme aux normes compilée avec l’indicateur de compilation ODBC_STD appelle SQLAllocEnv (ce qui peut se produire parce que SQLAllocEnv n’est pas déconseillé dans ISO), l’appel est mappé à SQLAllocHandleStd au moment de la compilation. Au moment de l’exécution, l’application appelle SQLAllocHandleStd. Le Gestionnaire de pilotes définit l’attribut d’environnement SQL_ATTR_ODBC_VERSION sur SQL_OV_ODBC3. Un appel à SQLAllocHandleStd équivaut à un appel à SQLAllocHandle avec un HandleType de SQL_HANDLE_ENV et un appel à SQLSetEnvAttr pour définir SQL_ATTR_ODBC_VERSION sur SQL_OV_ODBC3.
Dans certaines architectures de pilote, il est nécessaire que le pilote apparaisse sous la forme d’un pilote ODBC 2.x ou d’un pilote ODBC 3.x , en fonction de la connexion. Dans ce cas, le pilote peut ne pas être un pilote, mais une couche qui réside entre le gestionnaire de pilotes et un autre pilote. Par exemple, il peut imiter un pilote, comme ODBC Spy. Dans un autre exemple, il peut agir en tant que passerelle, comme EDA/SQL. Pour apparaître en tant que pilote ODBC 3.x , ce pilote doit être en mesure d’exporter SQLAllocHandle et, pour apparaître en tant que pilote ODBC 2.x , doit être en mesure d’exporter SQLAllocConnect, SQLAllocEnv et SQLAllocStmt. Lorsqu’un environnement, une connexion ou une instruction doit être alloué, le Gestionnaire de pilotes vérifie si ce pilote exporte SQLAllocHandle. Étant donné que le pilote le fait, le Gestionnaire de pilotes appelle SQLAllocHandle dans le pilote. Si le pilote fonctionne avec un pilote ODBC 2.x , il doit mapper l’appel à SQLAllocHandle à SQLAllocConnect, SQLAllocEnv ou SQLAllocStmt, le cas échéant. Il ne doit pas non plus faire avec l’appel SQLSetEnvAttr lorsqu’il se comporte en tant que pilote ODBC 2.x .
Cette section contient les rubriques suivantes :