Как я устанавливаю конфигурацию строки подключения программно в .NET?

59
задан Cœur 23 March 2017 в 15:39
поделиться

6 ответов

Я записал об этом в сообщение на моем блоге . Прием должен использовать отражение, чтобы засунуть значения как способ получить доступ к непубличным полям (и методы).

, например,

var settings = ConfigurationManager.ConnectionStrings[ 0 ];

var fi = typeof( ConfigurationElement ).GetField( "_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic );

fi.SetValue(settings, false);

settings.ConnectionString = "Data Source=Something";
114
ответ дан David Gardiner 24 November 2019 в 18:11
поделиться

Вы могли поместить его в файл ресурсов вместо этого. Это не будет иметь встроенных функций класса ConfigurationManager, но это будет работать.

Принятие Resources.resx:

Resources.Default.ConnectionString = "Server=myserver;" // etc

Тогда в Вашем коде:

conn.ConnectionString = Resources.Default.ConnectionString

Это - взлом, я знаю.

1
ответ дан Robert S. 24 November 2019 в 18:11
поделиться

Я в настоящее время использую внедрение зависимости для обработки различных строк подключения в dev/prod по сравнению с тестовыми средами. Я все еще должен вручную изменить webconfig, если я хочу переместиться в между dev и напоминанием, но для тестирования у меня есть интерфейс IConnectionStringFactory с реализацией по умолчанию, которая смотрит на веб-конфигурацию и альтернативную конфигурацию тестирования, которая возвращает статические значения. Тот путь, когда я тестирую меня просто, установил фабрику на реализацию тестирования, и это возвратит строку подключения тестирования для ключа, который я прошу. Иначе это посмотрит в webconfig.

я мог расширить это до другой реализации для dev по сравнению с напоминанием, но я - более удобное наличие единственной реализации IConnectionStringFactory в моем производственном блоке и реализации тестирования в моем блоке тестирования.

5
ответ дан Jamal Hansen 24 November 2019 в 18:11
поделиться

В дополнение к другим ответам, данным, и принятие строки подключения, не просто другая конфигурация, переменная или постоянная в целом, Вы могли бы рассмотреть использование класс SqlConnectionStringBuilder вместо того, чтобы непосредственно связать строку вместе.

РЕДАКТИРОВАНИЕ: Взлеты, извините просто видел, что Вы в основном хотите прочитать свою строку подключения (завершенный, я предполагаю) из другого источника.

1
ответ дан jpaugh 24 November 2019 в 18:11
поделиться

ConfigurationManager привык к , читает из файла конфигурации.

Ваше решение состоит в том, чтобы просто установить, ведут. ConnectionString к вести строке Вам нужно.

-2
ответ дан devio 24 November 2019 в 18:11
поделиться

Я считаю, что это работает для меня:

Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as         ConnectionStringsSection;
if (section != null)
{
    section.ConnectionStrings["MyConnectionString"].ConnectionString = connectionString;
    config.Save();
}

Это перезаписывает существующую строку подключения.

7
ответ дан 24 November 2019 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: