2010-09-22 164 views
1

我試圖改變連接字符串,但它只是在內存中的變化,而不是在app.config文件,下面是我使用更改連接字符串

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.ConnectionStrings.ConnectionStrings[1].ConnectionString = "metadata=res://*/TCSModel.csdl|res://*/TCSModel.ssdl|res://*/TCSModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=" + cmbServerName.Text + ";Initial Catalog=" + cmbDatabase.Text + ";User ID=" + txtUserName.Text.Trim() + ";Password=" + txtPassword.Password + ";Persist Security Info=True;MultipleActiveResultSets=True'"; 
config.ConnectionStrings.ConnectionStrings[1].Name = "TCSEntities"; 
config.ConnectionStrings.ConnectionStrings[1].ProviderName = "System.Data.EntityClient"; 
config.Save(ConfigurationSaveMode.Full, true); 
ConfigurationManager.RefreshSection("connectionStrings"); 

代碼時丟失或上面的代碼錯了?

回答

3

你在Visual Studio中運行你的應用程序嗎?如果是這種情況,Visual Studio將在您的bin目錄中創建一個臨時配置文件yourApp.vshost.exe.Config。該文件由您的代碼更新。當然,在下次啓動時,它會被重新創建(再次從您的源代碼目錄中的app.config複製),因此它看起來像保存不起作用。

所以,這是一個不會發生「生產」的問題。

0

如果您可以發佈您的app.config文件,這將是有幫助的。輸入中包含多少個連接字符串?此代碼更改或設置列表中的第二個。

試試這個,看看會發生什麼 - 清除列表和剛剛成立一個新的一次入境:

config.ConnectionStrings.ConnectionStrings.Clear(); 
config.ConnectionStrings.ConnectionStrings[0].ConnectionString = "metadata=res://*/TCSModel.csdl|res://*/TCSModel.ssdl|res://*/TCSModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=" + cmbServerName.Text + ";Initial Catalog=" + cmbDatabase.Text + ";User ID=" + txtUserName.Text.Trim() + ";Password=" + txtPassword.Password + ";Persist Security Info=True;MultipleActiveResultSets=True'"; 
config.ConnectionStrings.ConnectionStrings[0].Name = "TCSEntities"; 
config.ConnectionStrings.ConnectionStrings[0].ProviderName = "System.Data.EntityClient"; 

您也可以嘗試使用SaveAs,以確保您知道修訂版獲取輸出。