L'accès à vos données avec ODBC en C
Date de publication : 07 août 2008
Par Jessee Edouard (Accueil)
Le but de ce tutoriel est de vous initier à la programmation d'applications frontales de base de
données en langage C en utilisant la technologie ODBC. La maîtrise du langage C, du langage
SQL et d'au moins un SGBD (Access, MySQL, Oracle, ...) est donc évidemment requise.
Aucun rappel ne sera effectué sur ces trois points.
Commentez cet article : 1 commentaire ·
Version PDF Version hors-ligne
I. Introduction
II. Notions fondamentales
II-A. Les pilotes ODBC
II-B. Les sources de données ODBC
II-C. Le gestionnaire de pilotes ODBC
II-D. Les versions
III. Créer une source de données sous Windows
IV. Programmation
IV-A. La base de données
IV-B. Création d'une simple application
IV-C. Amélioration
IV-D. Une autre méthode : attacher les colonnes
V. Analyse des résultats
VI. Les diagnostics
VII. Se connecter de différentes manières
VII-A. La fonction SQLDriverConnect
VII-B. Les paramètres
VII-C. La chaîne de connexion
VIII. Connaître la structure d'une base de données
VIII-A. La fonction SQLTables
VIII-B. La fonction SQLColumns
IX. Conclusion
I. Introduction
ODBC (Open DataBase Connectivity) est une interface indépendante de tout système
d'exploitation (elle est portable) et de tout langage de programmation (elle est ouverte)
permettant de se connecter à n'importe quel serveur de base de données (même Access ou
Excel, etc.) et ce de manière standard. Fondamentalement, pour accéder à une base de
données, le programmeur est censé utiliser les APIs du SGBD utilisé (ou tout au moins un
wrapper). Cela présente un inconvénient majeur : elle rend les programmes dépendant du
SGBD. Par contre, c'est la seule solution lorsqu'on souhaite accéder à toutes les
fonctionnalités du logiciel, mais cela est loin de nos objectifs. ODBC est une interface qui
cache les détails de chaque SGBD. Pour être un peu plus exact, ODBC est une spécification
d'une API de SGBD, elle-même basée sur deux autres spécifications connues sous le nom de
X/Open et ISO CLI, formellement X/Open CAE "SQL Call-Level Interface" et ISO/IEC 9075-
3:1995 (E) "Call-Level Interface".
Dans ce tutoriel, nous allons découvrir comment utiliser ODBC sous Windows en langage C
mais, comme nous l'avons déjà dit tout à l'heure, ODBC existe sur de nombreux systèmes
incluant Windows, MacOS et UNIX, ce qui implique que ce tutoriel vous est quand même
aussi destiné même si vous n'êtes pas sous Windows.
II. Notions fondamentales
II-A. Les pilotes ODBC
ODBC fonctionne grâce à des pilotes, appelés justement pilotes ODBC, qui convertissent les
appels ODBC en appels natifs pour le SGBD. Pour accéder à une base de données en utilisant
ODBC, il faut donc qu'un pilote adéquat soit installé. Ce pilote est généralement
téléchargeable sur le site du constructeur s'il n'est pas déjà installé. Si vous êtes sous
Windows, vous n'avez pas besoin d'installer les pilotes pour Oracle, Access, dBase, Excel,
SQL Server et bien d'autres encore puisqu'ils ont déjà été installés en même temps que
Windows, à moins que vous vouliez tout simplement héberger plusieurs pilotes sur votre
ordinateur ou pour n'importe quelle autre raison.
II-B. Les sources de données ODBC
Une source de données ODBC est en quelque sorte un lien permettant à une application
utilisant ODBC de se connecter à la base de données décrite dans cette source de données.
Une source de données représente donc une base de données ainsi que le pilote qu'il faut
utiliser pour s'y connecter. La création d'une source de données se fait en quelques clics (ou
en ligne de commandes ...) en utilisant un utilitaire généralement fourni par le constructeur
(normalement fourni en même temps que le pilote). Les paramètres à spécifier lors de la
création d'une source de données varient selon le SGBD. Il s'agit de paramètres comme
l'emplacement du serveur, le port sur lequel il faut se connecter, le nom de la base, etc. mais
aussi et surtout le nom de la source de données appelée aussi DSN pour Data Source Name.
C'est ce nom qu'il faudra spécifier en argument de certaines fonctions comme SQLConnect
qui permet de se connecter à une base de données par exemple.
II-C. Le gestionnaire de pilotes ODBC
Les applications qui utilisent ODBC ne se lient pas directement à un pilote ODBC mais au
gestionnaire de pilotes ODBC. Le gestionnaire de pilotes ODBC fournit des services (l'API
ODBC) aux applications en s'appuyant en grande partie sur des services fournis par les pilotes
ODBC. C'est le pilote qui communique réellement au SGBD (c'est-à-dire qui implémente les
appels) et fournit les résultats, s'il y en a, au gestionnaire, qui a son tour les transmettra à
l'application. Sous Windows, les applications utilisent odbc32.dll, le Gestionnaire de pilotes
ODBC de Microsoft. Sous les autres plateformes, on a unixODBC, le standard industriel
sous UNIX et iODBC (Independant ODBC), également disponible sous UNIX mais plus
populaire sous MacOS. Tous deux sont des projets Open Source. En particulier, unixODBC
est livré avec la plupart des distributions Linux et UNIX tandis que iODBC est installé sous
MacOS X depuis la version 10.2.
II-D. Les versions
L'API ODBC n'est pas restée la même depuis la version 1.0. Chaque nouvelle version a
amené des améliorations et de nouvelles fonctions par rapport à la version précédente. La
majorité des gestionnaires de pilotes ODBC sont actuellement conformes à la version 3.0
mais nombreux sont ceux qui supportent également une version 3.5x (un sur ensemble de la
version 3.0). Une des plus améliorations les plus importantes apportées par cette version par
rapport à la précédente est le support d'UNICODE. Dans ce tutoriel, nous-nous limiterons
cependant à la version 3.0, ainsi nos programmes pourront fonctionner aussi bien avec un
driver 3.0 qu'un driver 3.5x.
III. Créer une source de données sous
Windows
Windows permet d'administrer toutes les sources de données au sein d'une même interface qui
est l'Administrateur de sources de données ODBC. En outre, il permet également de voir la
liste de tous les pilotes installés. Une manière de l'ouvrir est d'aller dans Panneau de
configuration > Outils d'administration > Sources de données (ODBC), ou tout
simplement en exécutant directement le fichier odbcad32.exe. Pour ajouter une nouvelle
source de données, il suffit de cliquer sur Ajouter, de sélectionner le pilote à utiliser (ce qui
revient à selectionner le SGBD utilisé) puis de se laisser guider par l'assistant.
Sachez également que Windows distingue les sources de données utilisateurs visibles
uniquement pour l'utilisateur courant, les sources de données systèmes visibles pour tous les
utilisateurs et les sources de données fichiers qui sont représentées par un fichier. En
général, on préfèrera les sources de données utilisateurs ou systèmes.
IV. Programmation
IV-A. La base de données
Avant de commencer à programmer, créez d'abord une base de données que vous nommerez
pays_db contenant une table appelée pays_tbl constituée de deux champs : pays
(VARCHAR(14)) et capitale (VARCHAR(14)). Dans la suite, nous supposons qu'un utilisateur
nommé melem, utilisant le mot de passe 1234, ait accès à cette base. Vous remplacerez donc
ces nom et mot de passe par les vôtres ou rien (chaînes vides) si ce n'est pas requis. Créez
ensuite une source de données liée à cette base et nommez-la pays_dsn sans spécifier
d'utilisateur ni mot de passe par défaut afin que l'authentification soit obligatoire à chaque
connexion. Lorsque tout est prêt, vous pouvez continuer.
IV-B. Création d'une simple application
Pour utiliser ODBC sous Windows, il faut se lier avec odbc32.lib. En ce qui concerne le
fichiers d'en-tête, cela dépend des fonctions que l'on va utiliser mais dans tous les cas, il faut
tout d'abord inclure windows.h.
Une fois la source de données créée, se connecter à la base de données est relativement très
simple. Avant toute chose, il faut tout d'abord créer un environnement. A l'intérieur d'un
environnement, on pourra ensuite ouvrir une ou plusieurs connexions. Une fois la connexion
ouverte, on peut désormais envoyer des commandes (qui seront par exemple des requêtes
SQL) à la base de données.
Nous allons donc commencer par créer notre environnement, plus précisément : allouer un
handle d'environnement. Dans ODBC 3.x, la fonction à utiliser est SQLAllocHandle.
SQLRETURN SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE
InputHandle, SQLHANDLE * OutputHandlePtr);
En premier argument, on doit spécifier le type du handle qu'on veut allouer. Dans notre cas il
s'agit d'un handle d'environnement donc on met SQL_HANDLE_ENV.
En deuxième argument, nous devons spécifier le « parent » du handle que l'on veut créer.
Dans notre cas, on doit passer NULL car un environnement ne peut pas avoir de parent (mais
un environnement par exemple est parent d'une éventuelle connexion).
En troisième argument, nous devons fournir l'adresse de la variable dans laquelle nous
voulons stocker le handle retourné.
Et enfin, cette fonction retourne comme toutes SQL_SUCCESS ou
SQL_SUCCESS_WITH_INFO en cas de succès, autre chose en cas d'erreur. La différence
entre SQL_SUCCESS et SQL_SUCCESS_WITH_INFO sera expliqué un peu plus bas mais
pour l'instant, sachez que pour tester si une fonction a réussi, il faut comparer sa valeur de
retour avec SQL_SUCCESS et SQL_SUCCESS_WITH_INFO. Une fonction a réussi si elle a
retourné SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO. Heureusement, il existe une
macro qui fait bien cette comparaison, c'est la macro SQL_SUCCEEDED.
#include <windows.h> /* A inclure uniquement sous Windows */
#include <sql.h> /* API ODBC de base */
#include <sqlext.h> /* Fonctions propres a ODBC 3.x */
int main()
{
SQLHENV env;
if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env))
)
/* SQLAllocHandle a echoue */ ;
else
{
/* On continue */
SQLFreeHandle(SQL_HANDLE_ENV, env);
}
return 0;
}
Ensuite, comme nous voulons utiliser ODBC 3.x (que ce soit 3.0 ou 3.5x) , nous devons
configurer notre environnement de manière à supporter cette version.
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
A l'intérieur d'un environnement, on peut créer autant de connexions que l'on souhaite (dans la
mesure où le système et/ou le SGBD le permet). Dans notre cas, nous allons créer une seule
connexion.
SQLHDBC con;
SQLAllocHandle(SQL_HANDLE_DBC, env, &con);
Et maintenant, la partie la plus intéressante, nous allons nous connecter à la base de données
représentée par la source de données pays_dsn, en utilisant le login melem et le mot de passe
1234. La fonction à utiliser est SQLConnect.
SQLCHAR dsn[] = "pays_dsn", uid[] = "melem", pwd[] = "1234";
if ( !SQL_SUCCEEDED(SQLConnect(con, dsn, SQL_NTS, uid, SQL_NTS, pwd,
SQL_NTS)) )
/* SQLConnect a echoue */ ;
else
{
/* On continue */
1 / 21 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !