![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Papirus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Соединение создано в дизайне. Называется незатейливо "cnn". Во всех адаптерах оно используется для подключения к БД:
Теперь встала во весь рост задача (в начале таковой не было) предоставить юзеру возможность подключаться к разным сервакам. Для этого создана форма ввода логина... Остался пустяк... изменить программно текст строки подключения. |
|||
|
||||
kobra |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
|
|||
|
||||
Papirus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
То кобра!
И после этого My.Settings.cnn выдаст новую строку подключения??? Добавлено @ 10:52
Наверное, этим запутал. Это в дизайнере датасета содержится. Хотел продемонстрировать как осуществляется сейчас подключение. Т.е. идет обращение к глобальным установкам проекта, которые я и хотел бы изменить в зависимости от выбора пользователя. |
|||
|
||||
kobra |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
с Global не работал, не знаю как параметри менять
|
|||
|
||||
Walker |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: нет Всего: 16 |
Доброго времени суток, Уважаемые жители Винграда!
Присоединяюсь к вопросу Papirus. Предполагается на машине клиента устанавливать базу в "Мои документы" профиля пользователя. Каким же образом можно менять в случае необходимости ConnectionString, сгенерированный дизайнером?
is readonly. ConnectionString прописывается в ApplicationScope. Выходит, согласно msdn, без прав администратора также доступно только для чтения. Неужели MS не предоставляет возможности менять путь к базе при использовании типизированного DataSet? Или можно как-нибудь через мастер подключения указать, что строка должна генерироваться из чего-нибудь навроде
![]() Словом, Благодарен за разъяснение этого вопроса или ссылки на таковое. -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
||||
|
|||||
thomas |
|
||||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Papirus,
Walker, Приветствую. Я так понимаю строка соединения прописана в Settings. При этом студия создает(генерирует) класс, где прописаны настройки, которые указываются на вкладке Settings вашего проекта. В этом случае свойство connectionString действительно readOnly и изменению в runtime не подлежит. Как я вышел из этой ситуации. Предистория. Первый раз в программе вынужден был использовать типизированный датасет. При его создании строка соединения зашивается в класс myDS.designer.vb. Плюс в программе мне нужны были другие настроки для пользователя. Одна из них возможность указать путь к БД, которую будет юзать программа. Для этого я воспользовался Settings. Адля просмотра и редактирования настроек пользователем использовал PropertyGrid. Теперь решение проблемы. Класс Settings.Designer.vb содержит все эти свойства. Но к счастью для нас он Partial. Потому как если в процессе программирования вы измените в ручную что-то в этом классе, а потом добавите какие-либо настройки во вкладку Settings своего проекта, то студия сгенерит этот класс по-новой. И все ваши дописки и изменения в этом классе пропадут. Для этого используем вторую часть этого класса Settings.vb - она для нас. Вот там я и вписал свою функцию которая переопределяет строку соединения на основании того что указал пользователь в PropertyGrid. Вот так выглядит свойство в классе который сгенерировала студия
Как видно строка соединения прописана как атрибут и не подлежит изменению. К тому же это свойство относится к application. Поэтому в settings я добавил свое свойство типа user для указания файла БД. Оно тоже прописано в классе Settings.Designer.vb
А теперь как подставить свою БД в строку соединения. В классе settings.vb пишем
И соответственно в классе myDS.designer.vb.(класс дизайнера датасета) указываю вызов моей функции вместо вызова свойства строки подключения.
Все проблема решена. Теперь пользователь при старте программы идет в форму редактирования настроек программы(форма содержит PropertyGrid) и там выставляет свои настройки. Указывает место положения своей БД и типизированный датасет ищет БД там где он указал. Эти настройки сохраняются в файле user .config. Если программу открыл другой пользователь, то его настройки сохраняться в его файл в его профиле. Надеюсь это вам поможет. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||||
|
|||||||||
Walker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: нет Всего: 16 |
Несомненно! ![]() thomas, Благодарю за подробнейший ответ и интересное самостоятельное решение! Попробую поставить два плюса. Поздравляю с рубежом 1000! P.S. Прошу модераторов или топикстартера спустя год пометить тему решённой. -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
|||
|
||||
Papirus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
To Walker
Есть просьбочка. Попробовать это решение. Потом грохнуть 1-ю БД и снова попробовать... Что будет если первоначальный путь выдаст ошибку? |
|||
|
||||
farad |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 1.11.2007 Репутация: 3 Всего: 6 |
thomas, может быть лучше предоставить создание строки подключения тому, кто это должен далать? например так?
![]() |
|||
|
||||
Jugius |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.9.2009 Репутация: нет Всего: нет |
гм, не знаю, активна ли еще тема за давностью лет, но.. застрял на том же вопросе :(
thomas, решение интересное, изложено все очень подробно и доступно. но вот в этом месте:
есть неувязочка, при любом изменении датасета myDS дизайнер опать перепишет все по новой и строка:
вернется в исходную. Еще одно замечание: InitConnection объявляется для каждой таблицы, одной заменой не отделаешься, проще уж сделать замену в Public ReadOnly Property MailingConnectionString. Сейчас сам бьюсь над этой проблемой, адекватного решения пока не нашел. подход 1: переписывать designer.vb файла settings (но при изменении он переписвывается обратно) подход 2: попытаться перезаписать значение Public ReadOnly Property DATAConnectionString() As String для этого в settings.vb создал еще один Public Property, который должен подставлять.. но он не подставляет, потому как ReadOnly в общем, проблема не решена, или у меня моги не в ту сторону работают.. Если есть какие-то идеи - буду очень рад, как никак вопрос старый, должен же быть выход.. |
||||
|
|||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Jugius,
Привет. Я остановился на
Перезапись да происходит, если в дизайнермоде что-то переделать в ДатаСет. Но что мешает вам во-первых сначала всехорошо продумать что будет и как в ДатаСет и только потом когда ДатаСет создан окончательно в дизайнере внести изменения в код. А во-вторых, даже если и что-то поменяли в дизайнере во время разработки программы, то можно еще раз внести изменения в код ДатаСета. Успехов. ЗЫ я лично внес изменеия в код только один раз. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
Pessimister |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.6.2012 Репутация: нет Всего: нет |
Я использовал следующий подход. Строка соединения подставляется в MySettings сразу после считывания настроек из конфигурационного файла (в моем случае она берется из реестра, куда кладется программой установки). Для этого я внес следующие изменения в Settings.vb:
В результате, строка подключения, считанная из файла, используется только в том случае, если в реестре нет соответствующего ключа. К сожалению, этот подход не позволяет динамически менять строку подключения во время работы программы. Впрочем, можно попытаться использовать событие PropertyChanged, для чего завести еще один параметр для строки подключения, но уже в области пользователя. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |