2016-01-18 2 views
0

Я пытаюсь переписать некоторые значения в нескольких файлах конфигурации в решении MVC. Я делаю что-то вроде этого:Заменить значение строки подключения

config.AppSettings.Settings["Key"].Value =newValue; 
config.Save(ConfigurationSaveMode.Modified); 

Мой вопрос: как сделать что-то подобное для файла ConnectionString ?. Я пытаюсь с этим кодом.

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); 
    builder["InitialCatalog"] = newValue; 
+0

SqlConncetionStringBuilder имеет свойство ConnectionString, которое можно изменить. Вы после этого? Или вы хотите обновить ConnectionString в файле конфигурации? – Martin

+0

Я хочу, чтобы выбрать имя базы данных, обновленные значения в файле connectionString, а затем перекомпилировать решение с новыми значениями, я не знаю, является ли лучший способ выбрать несколько баз данных для проекта, это было только то, что мне пришло в голову – UserEsp

+0

Да, я вызвал ConnectionString в свой конфигурационный файл, извините за то, что не был таким конкретным. – UserEsp

ответ

1

Может быть несколько способов добиться этого. Одним из простых способов было бы создать код, который мог бы динамически определять строку соединения на основе выбора пользователя из раскрывающегося списка и использовать предопределенные наборы ConnectionString, которые у вас есть в вашем файле конфигурации. Допустим, вы определили следующие ConnectionStrings,

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <connectionStrings> 
    <add name="Development" connectionString="data source=MyDataSource;Initial Catalog=DevDatabase;user id=sa;Pwd=devpassword;"/> 
    <add name="Test" connectionString="data source=MyDataSource;Initial Catalog=TestDatabase;user id=sa;Pwd=testpassword;"/> 
    </connectionStrings> 
</configuration> 

Теперь вы можете иметь следующий код цикла через ConnectionString и определить, какие из них следует использовать на основе выбора ниспадающего

string selectedEnvironemntName = "Development"; //set from dropdown selection 
var predefinedConnections = ConfigurationManager.ConnectionStrings; 
SqlConnectionStringBuilder connStringBuilder = null; 

foreach(ConnectionStringSettings connString in predefinedConnections) 
{ 
    if (connString.Name == selectedEnvironemntName) 
    { 
     connStringBuilder = new SqlConnectionStringBuilder(connString.ConnectionString); 
    } 
} 

//the below two lines can be anywhere in your solution as long as you can pass the connStringBuilder to SqlConnection definition 
SqlConnection connection = new SqlConnection(); 
connection.ConnectionString = connStringBuilder.ConnectionString; 

Ofcourse, один зависимости здесь. Вы должны убедиться, что выпадающие значения загружены на основе имени ConnectionString из файла конфигурации. Наличие этой зависимости гарантирует, что добавление нового ConnectionString в ваш файл конфигурации автоматически приведет к появлению новой записи в вашем выпадающем меню в UI

+0

Дело в том, что у меня разные имена connectionString для разных поставщиков, и я бы не хотел добавлять много соединенийString, потому что я не уверен, могу ли я повлиять на решение для изменения, которое обозначает имена. Является решением с разными проектами, которые используют эти файлы, что я хочу изменить только имя базы данных, но, вероятно, лучше всего добавить больше подключений для каждой среды, спасибо за вашу помощь. – UserEsp

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