Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La question, alors, comment ODBC standardise l’accès aux bases de données ? Il existe deux exigences architecturales :
Les applications doivent pouvoir accéder à plusieurs SGBD à l’aide du même code source sans recompiler ou relinker.
Les applications doivent pouvoir accéder simultanément à plusieurs SGBD.
Et il y a une autre question, en raison de la réalité de la place de marché :
- Quelles fonctionnalités du SGBD ODBC doit-il exposer ? Seules les fonctionnalités communes à tous les SGBD ou toute fonctionnalité disponible dans n’importe quel SGBD ?
ODBC résout ces problèmes de la manière suivante :
ODBC est une interface au niveau des appels. Pour résoudre le problème de la façon dont les applications accèdent à plusieurs SGBD à l’aide du même code source, ODBC définit une interface CLI standard. Cela contient toutes les fonctions dans les spécifications CLI de Open Group et ISO/IEC 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 implémente les fonctions dans l’API ODBC. Pour utiliser un autre pilote, l’application n’a pas besoin d’être recompilée ou relinkée. Au lieu de cela, l'application charge simplement le nouveau pilote et appelle les fonctions dans celui-ci. Pour accéder simultanément à plusieurs SGBD, l'application charge plusieurs drivers. La façon dont les pilotes sont pris en charge est spécifique au système d’exploitation. Par exemple, sur le système d’exploitation Microsoft Windows, les pilotes sont des bibliothèques de liens dynamiques (DLL).
ODBC définit une grammaire SQL standard. En plus d’une interface de niveau appel standard, ODBC définit une grammaire SQL standard. Cette grammaire est basée sur la spécification OPEN Group SQL CAE. Les différences entre les deux grammaires sont mineures et principalement en raison des différences entre la grammaire SQL requise par sql incorporé (Open Group) et une interface CLI (ODBC). Il existe également des extensions à la grammaire pour exposer les fonctionnalités de langage couramment disponibles non couvertes par la grammaire Open Group.
Les applications peuvent envoyer des instructions en utilisant une grammaire spécifique à ODBC ou au SGBD. Si une instruction utilise la grammaire ODBC différente de la grammaire spécifique au SGBD, le pilote le 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 des pilotes résolve le problème d’accès simultanément à plusieurs SGBD, le code nécessaire peut être complexe. Les applications conçues pour fonctionner avec tous les pilotes ne peuvent pas être liées statiquement à des pilotes. Au lieu de cela, ils doivent charger des pilotes au moment de l’exécution et appeler les fonctions dans ces derniers via une table de pointeurs de fonction. La situation devient plus complexe si l’application utilise plusieurs pilotes simultanément.
Au lieu de forcer chaque application à effectuer cette opération, ODBC fournit un Gestionnaire de pilotes. Le Gestionnaire de pilotes implémente toutes les fonctions ODBC, principalement en tant qu’appels directs aux fonctions ODBC dans les pilotes, et est lié statiquement à l’application ou chargé par l’application au moment de l’exécution. Ainsi, l’application appelle des fonctions ODBC par nom dans le Gestionnaire de pilotes, plutôt que par pointeur dans chaque pilote.
Lorsqu’une application a besoin d’un pilote particulier, elle demande d’abord un handle de connexion avec lequel identifier le pilote, puis demande que le Gestionnaire de pilotes charge 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 et transmet le handle de connexion pour le pilote. Le Gestionnaire de pilotes appelle ensuite la fonction à l’aide de l’adresse qu’elle a stockée précédemment.
ODBC expose un nombre important de fonctionnalités SGBD, mais ne nécessite pas de pilotes pour les prendre en charge. Si ODBC n’a exposé que des fonctionnalités communes à tous les SGBD, il serait peu utilisé ; après tout, la raison pour laquelle beaucoup de SGBD différents existent aujourd’hui est qu’ils ont des fonctionnalités différentes. Si ODBC a exposé toutes les fonctionnalités disponibles dans un SGBD, il serait impossible pour les pilotes d’implémenter.
Au lieu de cela, ODBC expose un nombre important de fonctionnalités ( plus que celles prises en charge par la plupart des SGBD), mais nécessite que les pilotes implémentent uniquement un sous-ensemble de ces fonctionnalités. Les pilotes implémentent les fonctionnalités restantes uniquement s’ils sont pris en charge par le SGBD sous-jacent ou s’ils choisissent de les émuler. Par conséquent, les applications peuvent être écrites pour exploiter les fonctionnalités d’un SGBD unique comme exposé par le pilote pour ce SGBD, pour utiliser uniquement ces fonctionnalités utilisées par tous les SGBD, ou pour vérifier la prise en charge d’une fonctionnalité particulière et réagir en conséquence.
Afin qu’une application puisse déterminer les fonctionnalités prises en charge par un pilote et SGBD, ODBC fournit deux fonctions (SQLGetInfo et SQLGetFunctions) qui retournent des informations générales sur les fonctionnalités du pilote et du SGBD et 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é.
Il est important de se rappeler que ODBC définit une interface commune pour toutes les fonctionnalités qu’il expose. En raison de cela, les applications contiennent du code spécifique aux fonctionnalités, et non du code spécifique au SGBD et peuvent utiliser tous les pilotes qui exposent 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 ; Au lieu de cela, lorsqu’un pilote mis à jour est installé, l’application utilise automatiquement les fonctionnalités, car son code est spécifique à la fonctionnalité, et non spécifique au SGBD.