[ADO.NET] Задание параметров подключения в рантайме

Andbar

Имеется WindForms-приложение, которое при запуске подключается к базе данных.
В приложении есть датасет, содержащий несколько (не менее пяти) таблиц с адаптерами.
Когда в процессе разработки потребовалось подключаться к другой базе данных на другом сервере, т.е. изменить строку подключения, обнаружилось, что эта строка прописывается для каждой таблицы в отдельном методе, при чём прописывается она в заголовке, генерируемом из датасета. Конечно, в хмлке, описывающей датасет, эта строка встречается только один раз, но мне от этого ни холодно, ни жарко.
Отсюда появился логичный вопрос: как реализовать смену строки подключения в рантайме? Я надеялся, что здесь есть инструмент подобный компоненту database в Delphi, через который можно управлять подключением, но похоже что ничего аналогичного нет: хоть на уровне дизайнера студии и существует некий "объект" называемый строкой подключения, но когда дело доходит до кода, он дробится на методы разных классов. Или я что-то неправильно делаю?

timefim

В дизайнере у адаптера ConnectionModifier выставить в public?

Andbar

В дизайнере у адаптера ConnectionModifier выставить в public?
Выставил Public.
Я так понимаю, теперь нужно конфигурировать свойство Connection для каждого адаптера?
Как-то не особо удобно (в особенности по сравнению с Delphi).

timefim

Я так понимаю, теперь нужно конфигурировать свойство Connection для каждого адаптера?
Да.
Как-то не особо удобно (в особенности по сравнению с Delphi).

А как это выглядит в делфи?

timefim

В 2008ой студии еще генерируется АдаптерМанагер, через который можно всеми остальными жонглировать.

Andbar

А как это выглядит в делфи?
там есть необязательный компонент TDatabase. Если он имеется на форме при создании объектов, работающих с БД, то будет использована его конфигурация, в противном случае - у каждого объекта, работающего с БД, будет создан свой экземпляр.

Alena_08_11

Во времена .NET 1.1 Я тупо создавал новый SqlConnection и ставил его в поле Connection у InsertCommand UpdateCommand SelectCommand и DeleteCommand дата адаптера. Как минимум сейчас такой подход тоже имеет право на жизнь. И ещё можно в дизайнере насоздавать ДатаАдаптеров (или чё там ща используется для связи ДатаСетов с бд ? ) для различных баз и в рантайме пользовацца ими в зависимости от ситуации.

Andbar

Ну это ещё менее удобно получится.
Насоздавать дата адаптеров - не вариант, т.к. данные подключения будут вводиться вручную.

6yrop

есть опция для дизайнера — брать конекшен стринг из конфига

Andbar

Property binding что ли? К сожалению, там нет свойств соединения.

6yrop

Нет. Там в визарже галочка етсь.

klyv

есть опция для дизайнера — брать конекшен стринг из конфига
это спасёт во время дизайна, но не во время выполнения

6yrop

это спасёт во время дизайна, но не во время выполнения
во время диплоимента тоже спасет. А вам надо прям в рантайме?

klyv

во время диплоимента тоже спасет. А вам надо прям в рантайме?
судя по первому посту, да

Andbar

ладно, этот вопрос снят: решили не извращаться, т.к. сервер вряд ли будет меняться, в крайнем случае - можно будет перебилдить.
Вот ещё один вопрос: есть какой-то способ заставить метод DataView.Find находить колонку не только при полном совпадении, но и при совпадении с началом поля, по которому осуществляется сортировка (пытался в конец строки добавлять %/*, не помогло)? Или как по другому сделать поиск в колонке по первым буквам, не прибегая к перебору всех строк?

timefim

DataView.Table.Select ?

Andbar

Нет, мне нужно только выделить определённую строку. Короче, начальная задача состоит в том, чтобы при наборе текста с клавиатуры подсвечивалась подходящая строка. Пока работает через обход всех строчек в цикле, но это, имхо, какое-то кустарное решение.

nik93

ладно, этот вопрос снят: решили не извращаться, т.к. сервер вряд ли будет меняться, в крайнем случае - можно будет перебилдить.
не может быть все так сложно

aleks058

У тебя адаптеры - partial-классы.
Создай у каждого свойство ConnectionString и в сеттере у коннекшена меняй это свойство.
У адаптеров для комманд (это которые не для таблиц, а для хранимок) в сеттере в цикле выставляй ConnectionString для всех команд.

6yrop

можно будет перебилдить.
эээ, датасеты конечно говно, но не настолько же. Достаточно в конфиге поменять коннекшенстиринг.
Оставить комментарий
Имя или ник:
Комментарий: