2010-11-24 53 views
5

我想從我的app.config中讀取連接字符串,但它只顯示我一個連接字符串,這也不在我的app.config中。閱讀你的app.config的connectionStrings元素

這裏是我的代碼:

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

而且它打印出這一點:

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

當我期待它打印出一個自定義的connectionString到我的指定我的數據庫之一app.config文件。

更新

嗨,大家好,感謝大家對我的問題,花費時間和努力來助陣。儘管你們都是對的,我可以簡單地使用ConfigurationManager.ConnectionStrings或以這種方式訪問​​任何其他小節,但我相信當我這樣做時,配置是隻讀的。我無法對其進行任何更改,例如添加新的連接字符串或刪除現有的連接字符串。我需要這樣做。請讓我知道是否有辦法在運行時修改配置文件。

回答

0

你能讀出任何配置設置(除了連接字符串)嗎?

嘗試:

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

同樣,語法看起來有點複雜。試試這個更簡單的版本:

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

它從你的machine.config中讀取。 <connectionStrings>後在app.config中插入一個<clear/>.

+0

我試過了。雖然沒有運氣。 – 2010-11-24 20:50:03

2

是否有您使用OpenExeConfiguration打開你的配置文件的一個原因?如果它是您作爲項目的一部分創建的app.config,則只需使用ConfigurationManager.ConnectionStrings即可。

2

ConfigurationManager.ConnectionStrings["ConnectionStringName"]應該這樣做,除非它存儲爲appSetting。

在這種情況下,它會在ConfigurationManager.AppSettings["SettingName"]

0

我有一個小的控制檯應用程序我寫的(包含在一個更大的web應用程序的解決方案)完全相同的問題 - 它似乎是我的app.config不再被拿起來了,唯一的連接字符串是我回來的是LocalSqlServer。

重新啓動修復它。

1

如果要編輯ConnectionStrings(或app.config中的任何部分),則需要使用Configuration對象的GetSection()方法返回的對象。

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

根據我的經驗,OpenExeConfiguration(字符串)中存在一個錯誤,這意味着它總是打開你的app.config。要從文件名打開配置文件,您需要使用OpenMappedExeConfiguration()。