2010-11-24 12 views
5

Ich versuche, die Verbindungszeichenfolgen aus meiner app.config zu lesen, aber es zeigt mir nur eine Verbindungszeichenfolge und das ist auch nicht in meiner app.config.Read connectionStrings Element Ihrer app.config

Hier ist mein 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()); 

Und es druckt diese:

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

Als ich es erwarte eine benutzerdefinierte Connection zu einem meiner Datenbanken zu drucken, die ich in der angegebenen app.config-Datei.

aktualisiert

Hallo Jungs, sie danken Sie alle Zeit auf meinem Problem zu verbringen und zu helfen versuchen. Obwohl alle von Ihnen Recht haben, dass ich einfach ConfigurationManager.ConnectionStrings verwenden oder auf diese Weise auf einen anderen Unterabschnitt zugreifen kann, glaube ich, dass die Konfiguration schreibgeschützt ist, wenn ich das tue. Ich kann keine Änderungen daran vornehmen, z. B. eine neue Verbindungszeichenfolge hinzufügen oder eine vorhandene entfernen. Und ich muss das tun. Bitte lassen Sie mich wissen, wenn es eine Möglichkeit gibt, die Konfigurationsdatei zur Laufzeit zu ändern.

Antwort

0

Können Sie ALLE Konfigurationseinstellungen (außer Verbindungszeichenfolge) auslesen?

Versuchen:

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

Auch sieht die Syntax ein wenig komplexer. Versuchen Sie diese einfachere Version:

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

Es liest von Ihrer machine.config. Nach <connectionStrings> in app.config legen Sie eine <clear/>.

+0

Ich habe das versucht. Aber kein Glück. –

2

Gibt es einen Grund, dass Sie OpenExeConfiguration verwenden Ihre Konfigurationsdatei zu öffnen? Wenn es sich um eine app.config handelt, die Sie als Teil Ihres Projekts erstellt haben, müssen Sie nur ConfigurationManager.ConnectionStrings verwenden.

2

ConfigurationManager.ConnectionStrings["ConnectionStringName"] sollte es tun, es sei denn, es ist als appSetting gespeichert.

In diesem Fall wäre es ConfigurationManager.AppSettings["SettingName"]

0

in sein ich genau das gleiche Problem mit einer kleinen Konsole app hatte, schrieb ich (in einer größeren Web-App-Lösung enthalten) - es schien, dass meine app.config nicht mehr überhaupt, und die einzige Verbindungszeichenfolge, die ich zurückbekam, war LocalSqlServer.

Ein Neustart repariert es.

1

Wenn Sie die ConnectionStrings (oder einen beliebigen Abschnitt in Ihrer app.config) bearbeiten möchten, müssen Sie das von der GetSection() - Methode eines Configuration-Objekts zurückgegebene Objekt verwenden.

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); 
} 

Nach meiner Erfahrung gibt es einen Fehler in der OpenExeConfiguration (string), was bedeutet, es immer Ihre app.config öffnet. Um eine Konfigurationsdatei von einem Dateinamen zu öffnen, müssen Sie OpenMappedExeConfiguration() verwenden.

Verwandte Themen