Change connection string in wpf application
I try to change connection string, but it is only change in memory, but not in App.Config file, below is the code I am using
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.Connec开发者_如何学GotionStrings[1].ProviderName = "System.Data.EntityClient";
config.Save(ConfigurationSaveMode.Full, true);
ConfigurationManager.RefreshSection("connectionStrings");
What is missing or wrong in the above code?
Are you running your application in Visual Studio? If that is the case, Visual Studio creates a temporary configuration file yourApp.vshost.exe.Config
in your bin
directory. This file is updated by your code. Of course, during the next start, it is recreated (again copied from app.config
in your source code directory), so it looks like the save didn't work.
So, this is a problem that won't occur "in production".
It would be helpful if you could post your app.config file. How many connection strings does it contain on input? This code changes or sets the second in the list.
Try this to see what happens - clear the list and just set a new one with a single entry:
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";
You could also try using SaveAs
to ensure you know where the revised version gets output.
精彩评论