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

Accès aux données Discussion :

utilisation de App.config et string.format


Sujet :

Accès aux données

  1. #1
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut utilisation de App.config et string.format
    Bonjour,

    J'ai ceci :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
      <connectionStrings>
        <add name="oracle" providerName="Oracle.DataAccess.Client"
            connectionString="Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1}))
            (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = {2})));User Id={3};Password={4};" 
             />    
      </connectionStrings>
      <appSettings>
        <add key="SERVEUR" value="localhost"/>
        <add key="PORT" value="1521"/>
        <add key="SID" value="XE"/>
        <add key="USERID" value="test"/>
        <add key="PWD" value="test"/>
      </appSettings>
    </configuration>
    et je voudrais faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string ch = String.Format(ConfigurationManager.ConnectionStrings["oracle"].ConnectionString, ConfigurationManager.AppSettings);
    Or j'ai le message suivant :
    L'index (de base zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste des arguments.
    j'ai essayé avec ça :

    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
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
      <connectionStrings>
        <add name="oracle" providerName="Oracle.DataAccess.Client"
            connectionString="Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1}))
            (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = {2})));User Id={3};Password={4};" 
             />    
      </connectionStrings>
      <appSettings>
        <add key="0" value="localhost"/>
        <add key="1" value="1521"/>
        <add key="2" value="XE"/>
        <add key="3" value="test"/>
        <add key="4" value="test"/>
      </appSettings>
    </configuration>
    J'ai le même message ... or j'ai vu qu'on pouvait passer en argument à String.format un tableau.
    Comment faire ?

    Merci pour les réponses

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Ta chaîne de connexion fait référence à 5 paramètres qui devront être remplacés. Tu as alors deux possibilités :
    • Passer effectivement 5 paramètres à la méthode, en plus de la chaîne contenant le format ;
    • Passer un tableau contenant 5 éléments, toujours en plus de la chaîne contenant le format.


    Le soucis ici c'est que ConfigurationManager.AppSettings n'est pas un tableau. C'est un type indexable et qui peut donc donner l'illusion d'en être un. Ici, ce qu'il faut que tu fasses, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string ch = String.Format(ConfigurationManager.ConnectionStrings["oracle"].ConnectionString, 
       ConfigurationManager.AppSettings["0"],
       ConfigurationManager.AppSettings["1"],
       ConfigurationManager.AppSettings["2"],
       ConfigurationManager.AppSettings["3"],
       ConfigurationManager.AppSettings["4"]);
    Note que le nom des valeurs dans la section appSettings n'a rien à voir avec les valeurs {0}, {1}, ... {4} dans ta chaîne de connexion.

    Dans ta chaîne de connexion, {0} sera remplacé par le premier paramètre fourni en plus lors de la l'appel à la méthode String.Format (dans le code que je viens de fournir ConfigurationManager.AppSettings["0"]). {1} par le second, et ainsi de suite.

    Pour des raisons de clarté, il vaut mieux que tu nommes explicitement les clés dans ta section appSettings
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <appSettings>
      <add key="host" value="localhost"/>
      <add key="port" value="1521"/>
      <add key="servuce" value="XE"/>
      <add key="username" value="test"/>
      <add key="password" value="test"/>
    </appSettings>

    Avec cette réécriture, le code que je t'ai fourni plus haut devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string ch = String.Format(ConfigurationManager.ConnectionStrings["oracle"].ConnectionString, 
       ConfigurationManager.AppSettings["host"],
       ConfigurationManager.AppSettings["port"],
       ConfigurationManager.AppSettings["service"],
       ConfigurationManager.AppSettings["username"],
       ConfigurationManager.AppSettings["password"]);
    J'espère que c'est plus clair pour toi

  3. #3
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    Bonsoir,

    Effectivement.
    Mon problème est que je vais avoir des connections sur plusieurs SGBD différents et que le nombre de paramètres est variable. Je voulais donc automatiser la construction de la chaîne de connexion.
    Je vais donc voir si il est possible de convertir un type indexable en tableau, sans quoi je le ferai moi-même.

    Merci pour ta réponse

  4. #4
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    Re bonsoir,

    J'ai résolu le problème en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int nb = ConfigurationManager.AppSettings.Count;
                    string[] parametres= new string[nb];
                    ConfigurationManager.AppSettings.CopyTo(parametres,0) ;
                    string ch = String.Format(ConfigurationManager.ConnectionStrings["oracle"].ConnectionString, parametres);
                    return new OracleConnection(ch);
    et ça marche

    Bonne fin de soirée

Discussions similaires

  1. Réponses: 18
    Dernier message: 24/10/2013, 14h24
  2. [VS2010Express]Pb d'utilisation de app.config
    Par Yolak dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/10/2010, 20h42
  3. Utilisation de app.config
    Par hervino dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2009, 12h00
  4. Réponses: 2
    Dernier message: 11/03/2008, 11h08
  5. Problème app.config/connexion string
    Par djuju dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/03/2007, 14h16

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