2010-09-22 5 views
1

я пытаюсь изменить строку подключения, но это единственное изменение в памяти, но не в App.config файл, ниже приведен код, я используюИзменить строку подключения в приложении WPF

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 создает временный конфигурационный файл yourApp.vshost.exe.Config в вашем каталоге bin. Этот файл обновляется вашим кодом. Конечно, во время следующего запуска он воссоздается (снова копируется из 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, чтобы убедиться, что вы знаете, где пересмотренная версия получает выход.

Смежные вопросы