Почему для параметра ConnectionString всегда устанавливается значение Application?

Я, наверное, не первый, кто сталкивается с этой проблемой, но нигде не мог найти правильного ответа.

У меня есть приложение Windows Forms, которое использует строго типизированный DataSet. Конструктор использует строку подключения, определенную в настройках приложения. Проблема в том, что этот параметр определен как область приложения (т.е. только для чтения), и мне нужно иметь возможность изменять его во время выполнения. В конструкторе настроек, когда тип настройки - «Строка подключения», невозможно изменить область действия на «Пользователь». И сгенерированный набор данных не предоставляет конструктора, позволяющего выбирать строку подключения во время выполнения, он всегда использует строку в настройках.

Вы знаете, почему MS ввела это ограничение? У вас есть обходной путь?

В настоящее время я использую обходной путь, который действительно уродлив: я меняю тип параметра на «Строка», а область действия - на «Пользователь». Таким образом, я могу изменить его во время выполнения, и он отлично работает. Проблема в том, что когда мне нужно изменить набор данных в конструкторе, я должен снова изменить его на «ConnectionString», иначе конструктор не будет работать.

Заранее благодарим за ваши предложения!


person Thomas Levesque    schedule 06.06.2009    source источник


Ответы (1)


Вы можете изменить значение параметра ApplicationScope во время выполнения. Хотя сгенерированное и строго типизированное свойство доступно только для чтения, вы можете использовать:

Properties.Settings.Default["App1"] = "bbb";

После этого Properties.Settings.Default.App1 будет читать «bbb»;

Это должно позволить оставить настройку времени проектирования в покое.

Вы не можете использовать Settings.Default.Save() для настроек ApplicationScope, но это сделано намеренно. Обычный пользователь не имеет прав на запись в подпапку Program Files.

person Henk Holterman    schedule 06.06.2009
comment
Спасибо за ответ. Это хорошее решение, но Properties.Settings.Default.Save () не сохраняет этот параметр ... Думаю, я мог бы сохранить его вручную в другом месте и всегда перезаписывать его при запуске моего приложения. - person Thomas Levesque; 06.06.2009
comment
Это именно то, что вам следует делать. Обычный пользователь не имеет права сохранять в \ Program Files \ - person Henk Holterman; 06.06.2009