在wpf应用程序中更改连接字符串

时间:2010-09-22 15:36:24

标签: c# wpf connection-string

我尝试更改连接字符串,但它只是在内存中更改,但在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");

上述代码中有什么缺失或错误?

2 个答案:

答案 0 :(得分:3)

您是否在Visual Studio中运行应用程序?如果是这种情况,Visual Studio会在yourApp.vshost.exe.Config目录中创建临时配置文件bin。此文件由您的代码更新。当然,在下次启动时,它会被重新创建(再次从源代码目录中的app.config复制),因此看起来像保存不起作用。

因此,这是一个“生产中”不会出现的问题。

答案 1 :(得分: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来确保知道修改后的版本的输出位置。