| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Runtime change ConnectionString |
| Автор: thomas 18.8.2007, 21:32 | ||||
| Приветствую всех. Для редактирования настроек программы использую PropertyGrid. Настройки прописаны в MyProject -->Settings. Там я указал только названия, а значения оставил пустыми. Студия создала app.config. Ну а настройки пользователя сохраняет в user.config. Соответственно сейчас действуют настройки Мои на моей машине. Так вот когда программу установят у пользователя на машине, первым делом ему будет предложено ввести настройки. Одна из которых это путь и имя БД. Все это я реализовал, изменив класс сгенерированный студией
Типа там разбил настройки по категориям, сделал кнопочки для выбора имени файла, выбора директории. Для этого написал пару классов. Осталась только одна проблема как в первое свойство Public ReadOnly Property MailingConnectionString() As String подсунуть значение свойства Public Property DataBase() As String вот в эту строку
У кого нибудь есть идеи? |
| Автор: SpaceSpace 20.8.2007, 08:21 |
| а не проще изменять конфиг файл? xml, тоесть? |
| Автор: thomas 20.8.2007, 22:03 |
| SpaceSpace, Спасибо, очень ценный совет. И главное по существу. Название темы посмотрите |
| Автор: Idsa 21.8.2007, 07:25 |
Хм... Действительно, а что тебе мешает изменять ConfigurationManager["connnectionStringName"] в Runtime? |
| Автор: thomas 21.8.2007, 08:46 | ||||||
| Idsa, Приветствую.
Мешает то, что ConfigurationManager работает с такой формой app.config. Это FW1.1.
А я имею вот такой app.config
Как говориться, почувствуйте разницу. И потом сам подумай. Если пишеться "взрослая" программа, для стороннего использования, то не красиво предлагать пользователю искать using.config и изменять в нем connectionString.(Потому как настройки пишутся в этот файл, а не в app.config) Юзверь может и понятия не иметь, а что такое xml. Он может даже путь к папке и имя файла в ручную не умеет писать. Поэтому я предусмотрел возможность через диалог указывать директории для файлов и пусть с именем файла базы данных. Единственное что мне не нравиться с использованием Settings и My, так это то, что мелкомягкие не предусмотрели прямой возможности как-то апосредованно влиять на application settings в runtime. Приходиться искать обходные пути. Ведь сам посуди. Пользователь может и должен указать свою базу данных, которую он будет пользовать. А программа автоматом , на основании полученной инфы, исправляет connection string. Ведь пользователь по идее и не должен знать что, такое провайдер данных и вообще что такое connection string. |
| Автор: Jlekc 21.8.2007, 09:07 | ||
а почему не использовать:
|
| Автор: SpaceSpace 21.8.2007, 09:42 |
thomas почитай про конфигурирование приложений. классы Configuration , ConfigurationManager хорошая книга - основы разработки приложений на платформе .NET Framework мелкосфты не такие идиоты, чтобы не давать возможноси делать свои конфиги |
| Автор: thomas 21.8.2007, 22:24 | ||||||
| Короче, я так понимаю, никто ничего дельного подсказать не может. Первый раз был вынужден создать в дизанере ДатаСет. Этот супер пупер ДатаСет должен иметь connection string. Он его поимел. Студия сохранила это connection string в app.config. Через My.Settings я могу его увидеть, к примеру в PropertyGrid. А дальше полная ... . В runtime этот ... connection string не установить. А при разработке программы, сохраняется тот который был установлен на машине разработчика. Следовательно пользователь программы может долго ждать когда ему программа, установленная на его машине, отобразит данные из супер пупер ДатаСета, с connection string машины разработчика. Вот почему я так ненавижу дизайнер.
Да, они не идиоты, они сделали My.Settings. Настройки категории пользователя(user) все просто замечательно. А вот категория application - попробуй, и ты увидишь сам какая это ... . ЗЫ SpaceSpace,
В первом FW это пространство имен и обьект. Во втором есть такие классы, но они работают "по старинке" как в первом FW вот с таким файлом app.config (http://msdn2.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx)
А отсюда ты хоть ... , но connection string супер пупер ДатаСету не подсунешь. А проблема только с этим. КАК подсунуть нужный connection string ДатаСету? |
| Автор: thomas 22.8.2007, 08:49 | ||||
| Я конечно не Магомед, а Microsoft не гора. Но Если гора не идет к Магомеду, то ... пошла на фиг, такая гора. В общем так, после долгих поисков я решил просто проигнорировать connection string который создал дизайнер ДатаСета. Как говориться "забил болт на это дело". Сначала в Settings.Designer.vb дописал функцию
А потом в MyDataSet.Designer.vb заменил строку, сгенерированную студией, на мою
Соответственно этот супер пупер ДатаСет получает connection string основанный на базе данных, которую указал пользователь при первом старте программы. Может не самое корректное и эстетичное решение |
| Автор: Jlekc 22.8.2007, 11:40 | ||||||
| thomas, всеже я не понял почему ты решил что невозможно изменить app.config на лету, используя средства M$ Исходный конфиг:
Полученый конфиг:
и пару строк кода:
|