2010-11-24 27 views
5

J'essaie de lire les chaînes de connexion de mon app.config mais cela ne montre qu'une chaîne de connexion et cela n'apparaît pas dans mon app.config.Lire l'élément connectionStrings de votre app.config

Voici mon code:

System.Diagnostics.Debugger.Break(); 

Configuration config = 
ConfigurationManager.OpenExeConfiguration(
        AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

foreach (var connectionString in config.ConnectionStrings.ConnectionStrings) 
    System.Diagnostics.Debug.Print(connectionString.ToString()); 

Et il imprime ceci:

data source=.\SQLEXPRESS;Integrated Security=SSPI; 
    AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

Quand je me attends à imprimer une connectionString personnalisée à l'une de mes bases de données que je l'ai indiqué dans la fichier app.config.

Mise à jour

Salut les gars, je vous remercie tous pour passer du temps sur mon problème et essayer d'aider. Bien que vous ayez tous raison de dire que je pourrais simplement utiliser ConfigurationManager.ConnectionStrings ou accéder à n'importe quelle autre sous-section de cette façon, je crois que quand je fais cela, la configuration est en lecture seule. Je ne peux y apporter aucune modification, comme ajouter une nouvelle chaîne de connexion ou en supprimer une existante. Et j'ai besoin de faire ça. S'il vous plaît laissez-moi savoir s'il existe un moyen de modifier le fichier de configuration au moment de l'exécution. Pouvez-vous lire tous les paramètres de configuration (en plus de la chaîne de connexion)?

Répondre

0

Essayez:

System.Configuration.ConfigurationManager.AppSettings("MyAppVariable"); 

En outre, cette syntaxe semble un peu complexe. Essayez cette version plus simple:

System.Configuration.ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString 
2

Il lit à partir de votre machine.config. Après <connectionStrings> dans app.config insérer un <clear/>.

+0

J'ai essayé ça. Pas de chance, cependant. –

2

Y at-il une raison que vous utilisez OpenExeConfiguration pour ouvrir votre fichier de configuration? S'il s'agit d'un app.config que vous avez créé dans le cadre de votre projet, tout ce que vous avez à faire est d'utiliser ConfigurationManager.ConnectionStrings.

2

ConfigurationManager.ConnectionStrings["ConnectionStringName"] devrait le faire, à moins qu'il ne soit stocké en tant que appSetting.

Dans ce cas, il serait ConfigurationManager.AppSettings["SettingName"]

0

J'ai eu le même problème avec une petite application de la console que j'ai écrit (inclus dans une solution d'application Web plus) - il semblait que mon app.config n'était plus être ramassé du tout, et la seule chaîne de connexion que je récupérais était LocalSqlServer.

Un redémarrage l'a corrigé.

1

Si vous souhaitez modifier la chaîne ConnectionStrings (ou toute section de votre app.config), vous devez utiliser l'objet renvoyé par la méthode GetSection() d'un objet Configuration.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConnectionStringsSection csSettings = config.GetSection("connectionStrings") as ConnectionStringsSection; 
if(csSettings != null) 
{ 
    // examples of removing all settings, adding a new one and removing it 
    csSettings.ConnectionStrings.Clear(); 
    csSettings.ConnectionStrings.Add(new ConnectionStringSettings("myCS", "<connectionString>")); 
    csSettings.ConnectionStrings.Remove("myCS"); 
    // save the changes 
    config.Save(ConfigurationSaveMode.Modified); 
} 

Dans mon expérience, il y a un bogue dans le OpenExeConfiguration (string) qui signifie qu'il ouvre toujours votre app.config. Pour ouvrir un fichier de configuration à partir d'un nom de fichier, vous devez utiliser OpenMappedExeConfiguration().