IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ADO.NET Discussion :

ADO.NET et GetFactoryClasses


Sujet :

ADO.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut ADO.NET et GetFactoryClasses
    Salut à tous,

    Afin de pouvoir valider une connexion à une base de données MySql je construit ma Provider grâce à ADO.NET et la méthode getFactoryClass.

    Cette technique marche sur un pc personnel mais ailleurs mon programme plante car je vais chercher dans un endroit précis du tableau mon connecteur MySQL et si celui-ci n'est pas référencé cela fait donc planter le programme.

    Voici le retour de mon datatable pour mon GetFactoryClasses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Odbc Data Provider
    .Net Framework Data Provider for Odbc
    System.Data.Odbc
    System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56
    1934e089
    OleDb Data Provider
    .Net Framework Data Provider for OleDb
    System.Data.OleDb
    System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c
    561934e089
    OracleClient Data Provider
    .Net Framework Data Provider for Oracle
    System.Data.OracleClient
    System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neu
    tral, PublicKeyToken=b77a5c561934e089
    SqlClient Data Provider
    .Net Framework Data Provider for SqlServer
    System.Data.SqlClient
    System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToke
    n=b77a5c561934e089
    Microsoft SQL Server Compact Data Provider
    .NET Framework Data Provider for Microsoft SQL Server Compact
    System.Data.SqlServerCe.3.5
    System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neut
    ral, PublicKeyToken=89845dcd8080cc91
    L'installation de driver MySQL pour .NET est pourtant bien installée.

    Pourquoi mon datatable ne contient-il pas de référence à MySQL dans ce cas ? A cause de cela je ne peux pas créer mon provider pour mon programme.



    Pour information voici mon bout de code servant à générer un provider MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
            public void InitialisationMysql()
            {
                DataSet DSconnexion = new DataSet("DSconnexion");
                DataTable DTconnexion = new DataTable();
     
     
                DTconnexion = DbProviderFactories.GetFactoryClasses();
                DSconnexion.Tables.Add(DTconnexion);
     
     
                foreach (DataRow row in DTconnexion.Rows)
                {
                    foreach (DataColumn column in DTconnexion.Columns)
                    {
                        Console.WriteLine(row[column].ToString());
                    }
     
                }
     
                InvariantName = DSconnexion.Tables[0].Rows[5]["InvariantName"].ToString();
                ConnexionString = "Server=99.999.99.999;Port=11111;Database=myclient01;Uid=pseudo;Pwd=abcdefg;";
     
            }


    Merci pour votre éclairage.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Vérifie dans ton fichier machine.config (dans C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config) si le provider MySQL est bien enregistré, dans l'élément configuration/system.data/DbProviderFactories

    Si ce n'est pas le cas tu peux le rajouter dans le app.config de ton appli (ajoute un <remove> avant le <add> au cas où il serait déjà présent dans le machine.config)

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <system.data> 
        <DbProviderFactories>
          <remove invariant="MySql.Data.MySqlClient" />
          <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
        </DbProviderFactories> 
      </system.data>

    (change la version si besoin)

    D'autre part il y a des trucs qui clochent dans ton code :
    - pourquoi tu crées un DataSet ? Tu as juste besoin de la DataTable, le DataSet n'apporte rien ici
    - le ".Rows[5]" a 9 chances sur 10 de pas donner le résultat voulu, ou de planter. Il n'y a aucune garantie que le provider MySQL (s'il est déclaré) soit toujours à cette position. Il faut se baser sur le InvariantName, qui est constant pour un provider donné (en l'occurrence "MySql.Data.MySqlClient")
    - pas la peine de passer par GetProviderFactories si tu connais déjà le provider à utiliser. Utilise directement GetProviderFactory, qui prend en paramètre l'InvariantName

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Salut Tomlev,

    Merci pour ton intervention.
    Je te remercie pour l'astuce. Je me suis donc renseigner sur la mise en place et l'utilisation de fichier app.config (et donc un jolie tuto sur developpez.com).

    - pourquoi tu crées un DataSet ? Tu as juste besoin de la DataTable, le DataSet n'apporte rien ici
    Je pensais que pour utiliser une DT je devais obligatoirement posséder un DS.

    - le ".Rows[5]" a 9 chances sur 10 de pas donner le résultat voulu, ou de planter. Il n'y a aucune garantie que le provider MySQL (s'il est déclaré) soit toujours à cette position. Il faut se baser sur le InvariantName, qui est constant pour un provider donné (en l'occurrence "MySql.Data.MySqlClient")
    Le principe était déjà d'établir une connexion en dur dans mon programme et qu'elle puisse marcher. Je te remercie du conseil que je vais maintenant respecter étant donné que ma connexion est établi.

    - pas la peine de passer par GetProviderFactories si tu connais déjà le provider à utiliser. Utilise directement GetProviderFactory, qui prend en paramètre l'InvariantName
    Tout à fait. merci à toi pour ces remarques.


    Comme d'habitude grand merci grand maitre .NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] [ADO.NET] Clef primaire auto incrémenté
    Par Guld dans le forum Accès aux données
    Réponses: 4
    Dernier message: 25/09/2004, 20h46
  2. [VB.NET] [ADO.NET] Adapter, TableMapping et DataSet xsd
    Par neo.51 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 23/09/2004, 16h52
  3. [VB.NET] [ADO.NET] DataAdapter et concaténation
    Par master56 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/06/2004, 13h25
  4. Réponses: 5
    Dernier message: 22/12/2003, 14h18
  5. [IB v7.1][C#][ADO.NET] Démarrer avec IB 71
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 14
    Dernier message: 05/08/2003, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo