Partager via


La solution ODBC

La question est donc de savoir comment ODBC normalise l'accès aux bases de données. Il existe deux exigences architecturales :

  • Les applications doivent pouvoir accéder à plusieurs SGBD en utilisant le même code source sans avoir à les recompiler ou à les relier.

  • Les applications doivent pouvoir accéder simultanément à plusieurs SGBD.

Une autre question se pose, en raison de la réalité de la place de marché :

  • Quelles sont les fonctionnalités du SGBD que l'ODBC doit exposer ? Est-ce uniquement les fonctionnalités communes à tous les SGBD ou toutes les fonctionnalités disponibles dans n'importe quel SGBD ?

ODBC résout ces problèmes de la manière suivante :

  • ODBC est une interface CLI. Pour résoudre le problème de l'accès des applications à plusieurs SGBD en utilisant le même code source, ODBC définit un CLI standard. Celui-ci contient toutes les fonctions des spécifications CLI de l'Open Group et de l'ISO/CEI et fournit des fonctions supplémentaires couramment requises par les applications.

    Une bibliothèque ou un pilote différent est nécessaire pour chaque SGBD qui prend en charge ODBC. Le pilote met en œuvre les fonctions de l'API ODBC. Pour utiliser un autre pilote, l'application ne nécessite pas d'être recompilée ou reliée. Au contraire, l'application se contente de charger le nouveau pilote et d'appeler les fonctions qu'il contient. Pour accéder simultanément à plusieurs SGBD, l'application charge plusieurs pilotes. La prise en charge des pilotes dépend du système d'exploitation. Par exemple, sur le système d'exploitation Microsoft Windows, les pilotes sont des bibliothèques de liaisons dynamiques (DLL).

  • ODBC définit une grammaire SQL standard. En plus d'une interface CLI standard, ODBC définit une grammaire SQL standard. Cette grammaire est basée sur la spécification SQL CAE de l'Open Group. Les différences entre les deux grammaires sont infimes. Elles sont principalement dues aux différences entre la grammaire SQL requise par SQL embarqué (Open Group) et une CLI (ODBC). La grammaire comporte également quelques extensions qui permettent d'exposer des fonctionnalités de langue disponible courantes non couvertes par la grammaire de l'Open Group.

    Les applications peuvent envoyer des instructions à l'aide d'une grammaire spécifique à ODBC ou SGBD. Si une instruction utilise une grammaire ODBC différente de la grammaire spécifique au SGBD, le pilote la convertit avant de l'envoyer à la source de données. Toutefois, ces conversions sont rares, car la plupart des SGBD utilisent déjà la grammaire SQL standard.

  • ODBC fournit un gestionnaire de pilotes pour gérer l'accès simultané à plusieurs SGBD. Bien que l'utilisation de pilotes résolve le problème de l'accès simultané à plusieurs SGBD, le code nécessaire à cet effet peut être complexe. Les applications conçues pour fonctionner avec tous les pilotes ne peuvent pas être liées statiquement à des pilotes. Au contraire, elles doivent charger les pilotes à l'exécution et appeler les fonctions qu'ils contiennent par l'intermédiaire d'une table de pointeurs de fonctions. La situation devient plus complexe lorsque l'application utilise plusieurs pilotes simultanément.

    Plutôt que de forcer chaque application à le faire, ODBC fournit un gestionnaire de pilotes. Le gestionnaire de pilotes met en œuvre toutes les fonctions ODBC, qui sont pour la plupart des appels Pass-through ODBC dans les pilotes. De plus, il est lié statiquement à l'application ou chargé par l'application à l'exécution. Ainsi, l'application appelle les fonctions ODBC par leur nom dans le gestionnaire de pilotes, plutôt que par un pointeur dans chaque pilote.

    Lorsqu'une application a besoin d'un pilote particulier, elle demande d'abord un descripteur de connexion permettant d'identifier le pilote. Ensuite, elle demande au gestionnaire de pilotes de charger le pilote. Le gestionnaire de pilotes charge le pilote et stocke l'adresse de chaque fonction dans le pilote. Pour appeler une fonction ODBC dans le pilote, l'application appelle cette fonction dans le gestionnaire de pilotes. Ensuite, elle transfert le descripteur de connexion du pilote. Par la suite, le gestionnaire de pilotes appelle la fonction à l'aide de l'adresse qu'il a enregistrée précédemment.

  • ODBC expose un grand nombre de fonctionnalités des SGBD. Toutefois, il n'est pas nécessaire d'utiliser des pilotes pour toutes les prendre en charge. Si ODBC n'exposait que les fonctionnalités communes à tous les SGBD, il serait peu utile. En effet, s'il existe aujourd'hui autant de SGBD différents, c'est parce qu'ils ont des fonctionnalités différentes. Si ODBC exposait toutes les fonctionnalités disponibles dans n'importe quel SGBD, les pilotes seraient incapables de les mettre en œuvre.

    Au contraire, ODBC expose un nombre important de fonctionnalités, plus important que celles prises en charge par la plupart des SGBD. En revanche, il exige que les pilotes ne mettent en œuvre qu'un sous-ensemble de ces fonctionnalités. Les pilotes ne mettent en œuvre les autres fonctionnalités que si elles sont prises en charge par le SGBD sous-jacent ou s'ils choisissent de les émuler. Ainsi, les applications peuvent être écrites pour exploiter les fonctionnalités d'un seul SGBD telles qu'elles sont exposées par le pilote de ce SGBD, pour n'utiliser que les fonctionnalités utilisées par tous les SGBD. Ou encore, elles peuvent vérifier la prise en charge d'une fonctionnalité particulière et réagir en conséquence.

    Pour qu'une application puisse déterminer les fonctions prises en charge par un pilote et un SGBD, ODBC fournit deux fonctions (SQLGetInfo et SQLGetFunctions) qui renvoient des informations générales sur les capacités du pilote et du SGBD, ainsi qu'une liste des fonctions prises en charge par le pilote. ODBC définit également les niveaux de conformité de grammaire API et SQL, qui spécifient de larges plages de fonctionnalités prises en charge par le pilote. Pour plus d'informations, consultez Niveaux de conformité.

    Rappelons que l'ODBC définit une interface commune pour toutes les fonctionnalités qu'il expose. De ce fait, les applications contiennent un code spécifique à la fonctionnalité, et non un code spécifique au SGBD. De plus, elles peuvent utiliser n'importe quel pilote qui expose ces fonctionnalités. L'un des avantages est que les applications n'ont pas besoin d'être mises à jour lorsque les fonctionnalités prises en charge par un SGBD sont améliorées. En revanche, lorsqu'un pilote mis à jour est installé, l'application utilise automatiquement les fonctionnalités, car son code est spécifique à la fonctionnalité et non au pilote ou au SGBD.