Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получить DataAdapter по DataTable / 8 сообщений из 8, страница 1 из 1
29.08.2007, 10:49
    #34760495
_jt
_jt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Сейчас просматриваю типизированный датасет...Каждой таблице ассоциирован свой тейбладаптер, покапался в мемберах датасета, ничего похожего на это не нашел, подскажите кто знает, можно ли получить объект сабж..или наоборот.
...
Рейтинг: 0 / 0
29.08.2007, 13:26
    #34761256
_jt
_jt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Диалог PreviewData из VS2005 тоже откуда-то информацию черпает...
...
Рейтинг: 0 / 0
29.08.2007, 19:18
    #34762866
_wwwwww_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Типизированные адаптеры не являются членами класса датасета. Они создаются в отделньом неймспейсе. Полистай файл dataset.designer.cs и увидишь в самом низу классы адаптеров
...
Рейтинг: 0 / 0
30.08.2007, 08:15
    #34763327
_jt
_jt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Да, ты прав.
Жаль что нельзя получить из таблицы ссылку на объект адаптера :(
...
Рейтинг: 0 / 0
31.08.2007, 17:40
    #34768908
Senja
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Можно попробовать с помошью отражения создать новый экземпляр адаптера. Мастер всегда называет адаптер так же как таблицу+"TableAdapter". Что-то типа

Код: plaintext
1.
2.
string tableName = "Название таблицы";
Object adapter = Assembly.GetAssembly(ваш датасет.GetType()).CreateInstance("пространство имен."+TableName+"TableAdapter", true);
...
Рейтинг: 0 / 0
31.08.2007, 18:28
    #34769070
_wwwwww_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
_jtДа, ты прав.
Жаль что нельзя получить из таблицы ссылку на объект адаптера :(

Таблица не знает как лазить в базу и не должна знать. Помещать в таблицу адаптер было бы нарушением правил инкапсуляции. Зачем получать из таблицы адаптер, если можно получить таблицу из адаптера через GetData() ? Если уж так не терпится, нужно просто сделать хелпер, в котором указать связь между типом таблицы и типом адаптера.
...
Рейтинг: 0 / 0
31.08.2007, 20:10
    #34769266
Senja
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Вообще наверное действительно не должна, но хочется регулярно.

Ведь как ведет себя мастер в студии? При "добавлении таблицы" кладет на форму BindingSource и TableAdapter. Причем BindingSource может быть нужно несколько на отдну таблицу, а вот ситуацию, когда на одной форме нужно два идентичных адаптера я себе не представляю.
Почему бы не объявить адаптеры static и не париться? Все равно никакого внутреннего состояния у адаптеров нет. Там DataAdaper + набор SqlCommand, который у всех экземпляров одного адаптера все равно создается идентичным и Connection, который либо свой собственный у каждого, либо один общий у всех. Нафига плодить экземпляры для каждой формы?

Плюс к тому TableAdapter скрывает некоторые важные свойства DataAdapter. Вобщем TableAdapter - это плохо :(
...
Рейтинг: 0 / 0
03.09.2007, 16:31
    #34772325
_jt
_jt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить DataAdapter по DataTable
Я сделал функцию которая проходит рекурсивно все таблицы в датасете делая обновление. Вот и нужно было получить из таблицы ассецеированный адаптер. Тут пошли мысли, как бы было здорово сказать таблице чтобы она сама передала обновления себя...
Сделал через полученный из Type метод GetData, анализируя его возращаемый тип, получая тип таблицы..получается как-то кверх ногами, но другого способа я не нашел.
SenjaМожно попробовать с помошью отражения создать новый экземпляр адаптера. Мастер всегда называет адаптер так же как таблицу+"TableAdapter". Что-то типа

Код: plaintext
1.
2.
string tableName = "Название таблицы";
Object adapter = Assembly.GetAssembly(ваш датасет.GetType()).CreateInstance("пространство имен."+TableName+"TableAdapter", true);

Хотелось бы, чтобы ничего не зависло от имен, но спасибо Senja, я не знал что можно екземпялры создавать через тип.
Ты говоришь про статические датаадаптеры, у меня вопрос) Я еще это не проверял..Как ведет себя экземпляр датасета? если я изменяю его один экземпляр, допустим на 1 форме, что будет с другими? Впрочем экземпляр он и есть экземпляр..Видно придется передавать ссылку на один датасет созданный где-нибдь в главной форме другим формам через свойтсва чтоли...Тогда возникает проблема с визуальной привязкой контролов..можно конечно создать екземпялр также визуально, а в коде инициализации присваивать ему ссылку датасета из главной формы, но что-то получаетс как-то все не тат, как хотелось бы...Нет примера как это правельно делать, приходится выдумать какой-то глючный код
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получить DataAdapter по DataTable / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]