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

C# Discussion :

ConnectionString depuis app.config


Sujet :

C#

  1. #1
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut ConnectionString depuis app.config
    Salut à tous,

    Je me trouve devant une bien étrange erreur, j'ai beau chercher je ne trouve pas réponse au problème.
    J'ai une bibliothèque de classes dans laquelle j'ai défini une chaîne de connexion dans le fichier app.config. La chaîne est correcte, je l'ai testé. Par contre, je n'arrive pas à y faire référence dans une classe depuis le fichier app.config.

    Voici des bout de codes illustrant le problème :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
      </configSections>
      <connectionStrings>
        <add name="SqlConnectionString"
          connectionString="Data Source=un-serveur;Initial Catalog=une-bdd;User ID=sa;PWD=un-mot-de-passe;"
          providerName="System.Data.SqlClient" />
      </connectionStrings>
    </configuration>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*ceci fonctionne
    private SqlDataContext _db =
      new SqlDataContext("Data Source=un-serveur;Initial Catalog=une-bdd;User ID=sa;PWD=un-mot-de-passe;");
    */
    /* ceci ne fonctionne pas */
    private SqlDataContext _db = 
      new SqlDataContext(ConfigurationSettings.AppSettings["SqlConnectionString"]);
    SqlDatacontext retourne null. De plus, je n'ai pas accès à System.Configuration.ConfigurationManager alors que je suis sous .net 3.5!

    Voyez-vous ce qui cloche?

    Par avance, merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut
    Bonjour,

    As tu utilisé la classe statique System.Configuration.ConfigurationManager ?

    Christian

  3. #3
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Je ne comprends pas la question
    Citation Envoyé par franculo_caoulene Voir le message
    De plus, je n'ai pas accès à System.Configuration.ConfigurationManager alors que je suis sous .net 3.5!

  4. #4
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    même s'il te semble que la dll System.Configuration est ajoutée par défaut, il faut l'ajouter comme réference dans ton projet de classes.

  5. #5
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    J'ai maintenant accès à System.Configuration.ConfigurationManager. Il faut, en effet, tout simplement référencer la dll, merci Redouane. Malheureusement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private string cs = ConfigurationManager.AppSettings["SqlConnectionString"];
    retourne toujours null...

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Par défaut
    Bonjour,

    as-tu essayé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string cs = ConfigurationManager.ConnectionStrings["SqlConnectionString"];
    ?

  7. #7
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Oui, comme as dis miniloutre, parce que t'a utilisé ta chaine de connexion dans connectionStrings, mais AppSettings, donc ci porkoi il te renvoi null:

    String s = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;

  8. #8
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Ca devient mystique pour moi. Je me suis laissé emporté avec AppSettings, mais là, je ne comprends pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private string cs = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;
    retourne une NullReferenceException.

  9. #9
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    C'est sur que t'a dés te trompis dans le nom exacte de la clé, pour tester ça, essaye d'appeler ta chaine de connection en utilisant l'index et pas la clé:
    private string cs = ConfigurationManager.ConnectionStrings[0].ConnectionString;
    Index 0 correspond à la 1ère clé.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Par défaut
    je crois qu'il faut juste ne pas rajouter le .ConnectionString à la fin, càd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string cs = ConfigurationManager.ConnectionStrings["SqlConnectionString"];

  11. #11
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Pour récupérer les noms exactes des clés de ton fichier de configuration, essaye de faire dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      foreach (ConnectionStringSettings item in ConfigurationManager.ConnectionStrings)
            {
    // Name est le nom de la clé
    // ConnectionString et le contenu de la clé
              MessageBox.Show(item.Name + " => " + item.ConnectionString);
     
            }

  12. #12
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    je crois qu'il faut juste ne pas rajouter le .ConnectionString à la fin, càd:


    Code :
    string cs = ConfigurationManager.ConnectionStrings["SqlConnectionString"];
    ConfigurationManager.ConnectionStrings["SqlConnectionString"] est de type ConnectionStringSettings, et on peux pas le convertir en string.
    Donc pour récupérer la chaine de connexion, il faut ajouter ConnectionString et pour récupérer la clé, tu peux ajouter Name dans ce cas ;-)

  13. #13
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    miniloutre, ça revient au même, il faudrait faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private ConnectionStringSettings css = ConfigurationManager.ConnectionStrings["SqlConnectionString"];
    // ...
    css.ConnectionString
    Dans ce cas css = null.

    Par contre, ceci est une avancée, je suis certain de ne pas me tromper dans le nom de la chaîne de connexion (50 copier/coller d'agacement me font dire que c'est correct). L'instruction que Redouane propose me retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    Or, j'utilise SQL2005! Que cela veut-il dire?

    [edit] la boucle retourne quant à elle :
    LocalSqlServer => data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    ApplicationServices => data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

  14. #14
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    Cela veux dire, qu'il te retourne l'instance par défaut de SQL Server, hors il te retourne pas ta chaine de connexion que t'a crée. il ne le trouve pas dans ton fichier de configuration.

  15. #15
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    LocalSqlServer => data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    ApplicationServices => data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    Tu est sûr que tu travaille sur le même fichier de configuration ?
    parce que ce fichier :
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <configSections>
    </configSections>
    <connectionStrings>
    <add name="SqlConnectionString"
    connectionString="Data Source=un-serveur;Initial Catalog=une-bdd;User ID=sa;PWD=un-mot-de-passe;"
    providerName="System.Data.SqlClient" />
    </connectionStrings>
    </configuration>
    va retourner :

    LocalSqlServer => data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    SqlConnectionString => Data Source=un-serveur;Initial Catalog=une-bdd;User ID=sa;PWD=un-mot-de-passe;

  16. #16
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    C'est justement ça qui est affolant!

    J'ai un projet "Repositories" dans lequel j'ai défini le App.config à la racine du projet. Le fichier de classe où j'ai tant de problème se trouve dans ce projet dans un répertoire SQLServer. Pour le moment je suis au tout début du développement et je n'ai que ça. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MyNS.Repositories
        + SQLServer
            + UnRepository.cs
        + App.config
    Ai-je raté quelque chose?

  17. #17
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    ça me semble normale, essaye d'appeler la chaine de connexion dans un autre type de fichier.

    deja ton projet, est ce une application windows ou class library ?!!

  18. #18
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    C'est une bibliothèque de classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Solution
      + MyNS.Entities
      + MyNS.Repositories
      + MyNS.Services
      + MyNS.MvcSite
    ça me semble normale, essaye d'appeler la chaine de connexion dans un autre type de fichier.
    Je ne comprends pas.

  19. #19
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Maintenant je comprends , c'est que dans ton cas il cherche la chaine de connexion dans le projet "MyNS.MvcSite".
    Donc essaye d'ajouter un fichier de configuration (App.Config ou Web.Config dans le cas d'une application web) dans "MyNS.MvcSite" et ajoute ta chaine de connexion.

    Bonne courage.

    Nb: en tenant compte que MyNS.MvcSite est ton projet d'interface (View).

  20. #20
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Ah ben merci, c'est tout bêtement ça, je pensais qu'il fallait le déclarer dans le projet.

    Mais du coup, ça ne m'arrange pas du tout, je ne veux pas que les site soit lié à la base de données, mais plutôt le repository...

    Enfin, c'est un autre problème, merci encore.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modification App.config ConnectionStrings
    Par ppphil dans le forum C#
    Réponses: 0
    Dernier message: 17/11/2009, 16h15
  2. App.Config et ConnectionStrings
    Par El_Titof dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/09/2009, 12h00
  3. Réponses: 3
    Dernier message: 12/02/2009, 13h00
  4. [VB 2005]fichier app.config & connectionstring
    Par Kropernic dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/06/2008, 18h05
  5. Réponses: 2
    Dernier message: 23/03/2007, 14h00

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