Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXTRACTION DE DONNÉES DANS UNE BASE DE DONNÉES ODBC AVEC UN DATA SOURCE NAME (DSN) EN C#


Information sur le tutorial

Catégorie :Base de données Tutorial .NET ( DotNet ) Date de création : 15/01/2006 21:37:50 Vu : 21 440 fois

Note :
9,33 / 10 - par 9 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Ce tutorial est fait pour tous ceux qui veulent extraire facilement des données d'une base à l'aide d'un OdbcDataAdapter et d'un DataSet grace 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 tutorial.

Tutorial

(Le code associé au tutorial est disponible ici .) 

Bonjour, tout d'abord, je ne prétends pas tout savoir sur le sujet, et si ce tutorial 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 : (vive MS Paint!)

pic_1.GIF
(Dessin 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.)


Le DSN est une sorte d'alias sur la base de données. Cela permet :
1- de simplifier la connexion à la base
2- 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)

A) 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#.
     Il se trouve sur le site de Microsoft ici.

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


pic_2.GIF
      Dans l’onglet Sources de données utilisateur, cliquez sur Ajouter.


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

pic_4.GIF      
      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.

pic_5.GIF
     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

A) 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 Multilin à true.
pic_6.GIF  pic_7.GIF

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;

B) 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 (\r\n pour sauter une ligne)
            textBox1.Text = "Courbe " + idCourbe + "\r\n";

            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] + "\r\n";

                  }

 

Et voilà :

pic_8.GIF

 

 

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.

15 janvier 2006 21:42:33 :
Ajout d'un lien vers le code.
15 janvier 2006 21:47:26 :
.
16 janvier 2006 07:49:25 :
.
16 janvier 2006 17:47:24 :
.
signaler à un administrateur
Commentaire de MorpionMx le 19/01/2006 10:41:13 administrateur CS

Impeccable le tuto !

signaler à un administrateur
Commentaire de guincetred le 19/01/2006 21:38:28

Merci beaucoup
Impeccable du début à la fin
david

signaler à un administrateur
Commentaire de econs le 03/02/2006 13:40:42 administrateur CS

Du gras, du souligné, de belles images bien commentées, des explications simples. Si tous les tutoriaux pouvaient être comme çà !

signaler à un administrateur
Commentaire de macnan le 11/02/2006 17:19:24

Merci pour ces commentaires, ça fait vraiment plaisir et ça donne envie d'en faire d'autres...
@+

signaler à un administrateur
Commentaire de FENETRES le 24/02/2006 11:45:26


Nota bene :
Les informations associées à une source de données (DSN) sont stockées dans la base de registres.
Exécuter la commande Regedit et ouvrez l'arborescence
HKEY_LOCAL_MACHINE ou HKEY_CURRENT_USER/Software/ODBC/ODBC.INI pour retrouver celles-ci.

signaler à un administrateur
Commentaire de jfperras le 02/03/2006 05:54:02

Très utile ce tutorial.  Félicitations pour ton travail

signaler à un administrateur
Commentaire de woot6768 le 26/05/2006 17:42:09

Excellent tuto !
Merci

signaler à un administrateur
Commentaire de dedelle le 25/08/2006 13:54:26

Je débute avec C# et ce tutorial m'a bien servi.
Merci beaucoup pour ces explications très claires!

signaler à un administrateur
Commentaire de dPompei2 le 01/09/2006 11:15:13

tres tres bon tut, merci !
dommage que "il y a eu une erreur lors de la notation" sinon tu aurais un 10 de plus de ma part !

signaler à un administrateur
Commentaire de mgfirst le 29/11/2006 08:21:42

Bon courage et merci.

signaler à un administrateur
Commentaire de mouhnadjib le 23/11/2007 12:58:00

merci

signaler à un administrateur
Commentaire de adilas02 le 10/01/2008 15:21:13

je suis un debutant en c# et j'arrive pas à executer ce programme, lors du debogage, le pg me demande de gerer des exception

signaler à un administrateur
Commentaire de DjReivax74 le 30/01/2008 10:56:58

Alors là, mes respects enfin un tuto bien fait de A à Z!!!

MERCI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

signaler à un administrateur
Commentaire de SkySkillz le 27/03/2008 09:35:26

10/10 pour le tutorial !
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
using System.Data;
Pour ceux qui auraient du mal à trouver les bons includes ^^.

signaler à un administrateur
Commentaire de erosplus le 04/04/2008 09:37:06

coul le tuto

signaler à un administrateur
Commentaire de cudenetf le 28/10/2008 07:10:27

Bonjour, merci pour ce tutorial.
J'ai essayé de faire un truc du genre pour accéder a une base de données foxpro ( des fichiers .dbf) , sur mon ordi ou est installé visual studio,cela fonctionne tres bien.
Des que j'essaie de mettre le programme sur un autre ordinateur ( sur lequel j'ai installé odbc_net.msi) , ca ne fonctionne pas et m'envoie un message d'erreur du type IM001 ( genre driver non trouvé ou trop peu de parametres , etc...) j'ai regardé un peu dans le truc de odbc sur la machine sur lequel je tente de faire fonctionne rle programme et pour certains drivers je vois que leur version semblent plus anciennes que celles installées sur mon poste ou je developpe, Y a t il un site pour la mise a jour des odbc drivers ?
Ensuite j'ai essayé de faire avec un driver odbc "de base" (sans passer par DSN) et ca a fonctionné sur une machine mais par sur d'autre
voici le config :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="fac_gestatio_2.Properties.Settings.ConnectionString"
            connectionString="Driver={Microsoft dBase Driver (*.dbf)};collatingsequence=ASCII;dbq=C:\MABASE;defaultdir=C:\MABASE;deleted=0;driverid=21;fil=dBase III;filedsn=C:\connection_mabase;maxbuffersize=2048;maxscanrows=8;pagetimeout=5;safetransactions=0;statistics=0;threads=3;uid=admin;usercommitsync=Yes"
            providerName="System.Data.Odbc" />
    </connectionStrings>
</configuration>

bon la je vois qu'il y a une histoire de DSN ... mais je ne l'ai pas copié sur l'autre ordianteur et ca fonctionen quand meme... bref je suis un peu pommé sur quel driver choisir , comment les mettre a jour pour qu'ils soient pareils sur tous le spostes , etc...

si quelqu'un a une idée ou une suggestion merci d'avance

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,016 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.