2009-10-07 8 views
10

Je souhaite afficher dans une application Windows Forms une liste de N cases d'option permettant à l'utilisateur de choisir un serveur de base de données cible. Je souhaite ajouter les chaînes de connexion SQL Server dans le fichier app.config afin qu'elles soient lues par l'application lors de l'exécution et affichées dans le formulaire Windows en tant que boutons radio.Plusieurs chaînes de connexion SQL Server dans le fichier app.config

Au début, je pensais d'utiliser un séparateur pour séparer les connexions

<appSettings> 
    <add key="ConnectionString" value="connection1|user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30|connection2|user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/> 
</appSettings> 

Et puis diviser les paires de valeurs clés.

Est-il possible de faire cela différemment?

Répondre

30

Pour rechercher toutes les chaînes de connexion définies dans votre app.config, utilisez le ConfigurationManager (à partir de System.Configuration). Il a une énumération: ConfigurationManager.ConnectionStrings qui contient toutes les entrées dans votre <connectionStrings>.

Vous pouvez passer en boucle avec ce code:

foreach(ConnectionStringSettings css in ConfigurationManager.ConnectionStrings) 
{ 
    string name = css.Name; 
    string connString = css.ConnectionString; 
    string provider = css.ProviderName; 
} 

Le Name est juste le nom symbolique que vous donnez à votre chaîne de connexion - il peut être quelque chose, vraiment. Le ConnectionString est la chaîne de connexion elle-même.

Le ProviderName est le nom du fournisseur pour la connexion, par ex. System.Data.SqlClient pour SQL Server (et d'autres pour un autre système de base de données). Si vous omettez l'attribut providerName= de votre chaîne de connexion dans config, SQL Server (System.Data.SqlClient) est utilisé par défaut.

Marc

+0

Obtient les chaînes de connexion dans *** machine.config ***, et pas seulement *** app.config *** – Kiquenet

3

Oui, il est possible de le faire d'une autre manière. Vérifiez la section connectionStrings que vous pouvez créer dans le fichier app.config.

<configuration> 
    <connectionStrings> 
     <add name="" connectionString=""/> 
     <add name="" connectionString=""/> 
    </connectionStrings> 
</configuration> 
+0

comment est-ce que je fais une boucle dans les fils de l'élément "connectionStrings" pour obtenir toutes les paires de valeurs de clé? –

12

Utilisez la section connectionStrings pour définir vos chaînes de connexion.

<connectionStrings> 
    <add name="connection1" connectionString="user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30"/> 
    <add name="connection2" connectionString="user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/> 
</connectionStrings> 
+0

comment faire une boucle à travers les fils de l'élément "connectionStrings" pour obtenir toutes les paires de valeur de clé. –

+2

foreach (Connectique de ConnectionStringSettings dans ConfigurationManager.ConnectionStrings) { } –

+0

nice! J'avais besoin de savoir comment ajouter le timeout ... Merci! –

0

Vous pouvez utiliser la classe AppSettings, obtenir une liste de tous les keys qui commencent par ConnectionString et de les afficher.

Votre fichier de configuration ressemblera à ceci:

<appSettings> 
    <add key="ConnectionString_Name1" value="..."/> 
    <add key="ConnectionString_Name2" value="..."/> 
    <add key="ConnectionString_Name3" value="..."/> 
</appSettings> 

Vous pouvez obtenir le nom, par splitting le nom de clé (en utilisant « _ » dans cet exemple).

BTW: Vous devrait également utiliser également la section ConnectionStrings, vous êtes seulement interessé dans les chaînes de connexion.

+1

Je recommanderais certainement d'utiliser la section '' dans votre app.config - c'est pour ça que c'est vraiment là! –

+1

@marc_s: Vous avez raison – GvS

1

Nous pouvons déclarer la chaîne de connexion multiples sous web.config ou app.config

<connectionStrings> 
<add name="SourceDB" connectionString="..." /> 
<add name="DestinationDB" connectionString="..." /> 
</connectionStrings> 

Dans DAL ou.fichier cs vous pouvez accéder à des chaînes de connexion comme celui-ci string SounceConnection = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString; string DestinationConnection = ConfigurationManager.ConnectionStrings["DestinationDB"].ConnectionString;

0

Voici comment utiliser LINQ pour obtenir la liste des chaînes de connexion:

List<string> connectionStrings = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .Select(v => v.ConnectionString) 
    .ToList(); 

Ou vous pouvez construire un dictionnaire de celui-ci:

Dictionary<string/*name*/, string/*connectionString*/> keyValue = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .ToDictionary(v => v.Name, v => v.ConnectionString); 
Questions connexes