Extraction de données dans une base de données ODBC avec un Data Source Name (DSN) en C#

Avant-Propos

Ce tutoriel est fait pour tous ceux qui veulent extraire facilement des données d'une base à l'aide d'un OdbcDataAdapter et d'un DataSet grâce au Data Source Name de la base.
Tous ces éléments seront présentés (dans le cadre de cette utilisation particulière uniquement) dans ce tutoriel.

Introduction

(Le code associé au tutoriel est disponible à l'adresse suivante .)

Bonjour, tout d'abord, je ne prétends pas tout savoir sur le sujet, et si ce tutoriel contient des erreurs ou est susceptible d'être amélioré, vos remarques seront les bienvenues! De plus, l'exemple donné est on ne peut plus inutile mais je pense qu'il permet de se familiariser avec ces mécanismes et de savoir où chercher de l'aide à l'avenir.

Alors, pour accéder à une base de donnée ODBC (si vous ne savez pas ce qu'est ODBC : http://www.commentcamarche.net/odbc/odbcintro.php3), il y a le DSN (Data Source Name), qui est une sorte de lien entre le système et la base de données. Ci-dessous un schéma très simplifié de ce à quoi sert le DSN... En réalité, comme son nom l'indique, le DSN n'est qu'un nom qui permet de faire la liaison avec une base via ODBC. (vive MS Paint!)

Le DSN est une sorte d'alias sur la base de données. Cela permet :

  • de simplifier la connexion à la base
  • et surtout de pouvoir changer facilement de base.

Etape 1 : Configurer ODBC sur le système concerné

Dans cette étape, nous allons configurer ODBC en affectant un DSN à notre de base de données.
(J'utilise une base Access dans mon exemple, mais le principe même d'ODBC veut que cette manip' soit valable pour tous les types de base de données compatibles ODBC)

Installer ODBC

Vous devez tout d'abord si vous ne l'avez pas fait télécharger le composant de prise en charge d'ODBC par Visual C#.

Configuration

Allez dans panneau de configuration->Outils d'administration->Sources de données (ODBC)

Dans l'onglet Sources de données utilisateur, cliquez sur Ajouter.

Sélectionnez le type de votre base de données (Ici : Microsoft Access Driver (*.mdb)) et cliquez sur Terminer.
S'affiche alors l'écran suivant :

Remplissez alors le champ Nom de la Source de Données (le fameux DSN) avec.....le nom que vous voulez associer à la base ! (par expérience, choisissez un nom explicite et simple à retenir).
Cliquez alors sur Sélectionner... et sélectionnez votre base de données.

Voilà, la configuration d'ODBC est terminée. Validez les deux fenêtres.

Etape 2 : Connexion à la base de données en utilisant le DSN

Prérequis

Notre DSN étant maintenant relié à la base, nous pouvons écrire une petite application qui va récupérer des valeurs dans la base et les afficher dans une textBox.

La base de test que je fournis (initialement construite pour afficher des courbes) contient deux tables :

  • PLOTS qui contient les champs ID et PLOT (PLOT est le nom associé à la courbe et ID est son identifiant).
  • COURBES qui contient les champs ID, DATE et MESURE (ID est l'identifiant de la courbe, DATE est la date de la mesure (abscisse) et MESURE est la valeur de la mesure (ordonnée))

Lancez Visual Studio et créez un nouveau projet nouvelle application Windows.
Mettez sur votre form une textBox (textBox1 par défaut) et dans la fenêtre de propriétés, mettez son attribut Multiline à true.

Double cliquez alors sur la form (pas sur la textBox !) pour éditer la méthode private void Form1_Load(object sender, System.EventArgs e).

Mais avant cela, il faut déclarer les namespace utilisés, ajoutez la directive using System.Data.Odbc;

Connexion

On se connecte à la base grâce à l'objet OdbcConnection. Il faut pour cela une chaîne de connexion (attribut ConnectionString de OdbcConnection).

Entrez le code suivant dans la méthode Form1_Load :

//création de la connection
OdbcConnection connection = new OdbcConnection();

//chaine de connection (du type "DSN=monDSN)
string chaineDeConnection = "DSN=baseTest";

//affectation de la chaine de connection à la connection
connection.ConnectionString = chaineDeConnection;

//ouverture de la connection
connection.Open();

Voilà, vous savez maintenant comment se connecter à une base de données à l'aide de son DSN.

Etape 3 : Récupération des données dans la base

Bien, maintenant, nous allons récupérer des valeurs dans la base à l'aide d'une requête SQL (Si vous ne savez pas ou peu ce qu'est une requête SQL, cliquez ici).

Pour cela, nous utiliserons deux objets : le DataSet et le OdbcDataAdapter.

Le DataSet est une sorte de projection des résultats d'une requête en mêmoire. Il stocke les valeurs renvoyées par la requête.

Le OdbcDataAdapter constitue la liaison entre la connexion (donc la base) et le DataSet. Il exécute la requête sur la base et rempli le dataSet grâce à la méthode Fill().

Complétez alors votre code :

//id de la courbe à afficher
int idCourbe=5;

//requete à exécuter (ici, nous récupérons les dates et valeurs des mesures de la courbe 5
//vous pouvez bien évidemment modifier cette requête
string requete = "SELECT DATE, MESURE FROM MESURES WHERE ID=" + idCourbe + " ORDER BY DATE ASC";

//création de la connection
OdbcConnection connection = new OdbcConnection();

//chaine de connection (du type "DSN=monDSN)
string chaineDeConnection = "DSN=baseTest";

//affectation de la chaine de connection à la connection
connection.ConnectionString = chaineDeConnection;

//ouverture de la connection
connection.Open();

//création du DataSet
DataSet data = new DataSet();

//création du OdbcDataAdapter
OdbcDataAdapter adapter = new OdbcDataAdapter(requete, connection);

//remplissage du DataSet avec les résultats de la requête
adapter.Fill(data);

Nous avons alors rempli le DataSet avec les valeurs qui nous intéressent. Il nous reste maintenant à les extraire.

Etape 4 : Extraction des données d'un dataset

Un DataSet possède des tables de type DataTable, qui possèdent des Columns (je n'irai pas jusqu'à traduire ce mot) de type DataColumn et des champs (Rows) de type DataRow.

Par défaut, le OdbcDataAdapter remplit la Table[0] du DataSet, c'est donc dans celle-ci que nous allons chercher nos données dans notre cas.

Bref, je pense que le code est peut-être plus explicite que des explications dans ce cas :

//id de la courbe à afficher
int idCourbe=5;

//requete à exécuter (ici, nous récupérons les dates et valeurs des mesures de la courbe 5
//vous pouvez bien évidemment modifier cette requête
string requete = "SELECT DATE, MESURE FROM MESURES WHERE ID=" + idCourbe + " ORDER BY DATE ASC";

//création de la connection
OdbcConnection connection = new OdbcConnection();

//chaine de connection (du type "DSN=monDSN)
string chaineDeConnection = "DSN=baseTest";

//affectation de la chaine de connection à la connection
connection.ConnectionString = chaineDeConnection;

//ouverture de la connection
connection.Open();

//création du DataSet
DataSet data = new DataSet();

//création du OdbcDataAdapter
OdbcDataAdapter adapter = new OdbcDataAdapter(requete, connection);

//remplissage du DataSet avec les résultats de la requête
adapter.Fill(data);

//on déclare maTable comme étant la première table du DataSet (celle qui nous interesse)
DataTable maTable = data.Tables[0];

//on affiche l'ID de la courbe concernée (rn pour sauter une ligne)
textBox1.Text = "Courbe " + idCourbe + "rn";

foreach (DataRow row in maTable.Rows)
{    
    //et on affiche dans  la textBox la date et la valeur de chaque mesure de la courbe
    textBox1.Text += "date : " + row[0] + "   -   val : " + row[1] + "rn";
}

Et voilà :

Conclusion

Vous savez donc maintenant (si je ne m'y suis pas mal pris) extraire des données d'une base de données en passant par un DataSet. Je l'ai déjà dit au début mais je le répète, ce qui est important, c'est de comprendre le principe, de comprendre les mécanismes mis en jeu. Selon moi, si vous savez faire ça, vous pouvez faire beaucoup plus...

Macnan.

Rejoignez-nous