Изменить строку подключения в приложении wpf - PullRequest
1 голос
/ 22 сентября 2010

Я пытаюсь изменить строку подключения, но это только изменение в памяти, но не в файле 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 ]

3 голосов
/ 22 сентября 2010

Запускаете ли вы свое приложение в Visual Studio? В этом случае Visual Studio создает временный файл конфигурации yourApp.vshost.exe.Config в каталоге bin. Этот файл обновляется вашим кодом. Конечно, при следующем запуске он воссоздается (снова копируется из app.config в директорию с исходным кодом), поэтому выглядит как сохранение не сработало.

Итак, это проблема, которая не возникнет "на производстве".

0 голосов
/ 22 сентября 2010

Было бы полезно, если бы вы могли опубликовать свой файл 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, чтобы убедиться, что вы знаете, откуда будет получена исправленная версия.

...