![]() |
|
Модераторы: gambit |
![]()
|
|
| Afrodiziac |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.5.2007 Репутация: нет Всего: нет |
Здравствуйте,
Проблема такая, есть Sql БД. В этой БД есть 9 различных таблиц: Users, Notifys, Events, Chanels,.... И есть Win приложение на C#. Суть работы которого, брать запись (-си ?) из таблицы Notifys в которой есть поля с идентификаторами: Канала по которому будет отправляться сообщение, События с которым ассоциируется эта запись и Подписчик которому собираемся отправить. У Подписчика есть свои настройки. Как (упрощенно) работает алгоритм отправки: 1. Вытаскиваем 1-у запись из таблицы Notifys. 2. Смотрим какому Подписчику оно принадлежит. 3. Вытаскиваем настройки Подписчика. 4. Смотрим по какому Каналу собираемся отправлять. 5. и т.д. Как это выглядит на практике: Код работы Рассыльщика
Код функции GetNOTSendNotify()
Код запроса настройки пользователя
Короче, доступ к данным ооочень муторный! К примеру из кода видно, что я с помощью одного адаптера и одной таблицы пытаюсь вытаскивать по чуть чуть (построчно) информацию из БД. А ведь мне нужно еще обратно, в БД, ложить обработанную информацию. Возникают вопросы: 1. Сколько нужно адаптеров, таблиц дата сетов и т.п. для работы с одной БД? 2. Как организовать работу с кучей таблиц?? Неужели нужно для каждой таблицы заводить целый комплект Адаптер + КомандаSelect + КомандаInsert + КомандаDelete + ДатаСет ?? А если таблиц 50?? |
||||||
|
|||||||
| Afrodiziac |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.5.2007 Репутация: нет Всего: нет |
"Наилучшим способом управления данными в цепочке "несколько объектов DataTable объекта DataSet - несколько таблиц в базе данных" является создание отдельных объектов DataAdapter для каждого экземпляра DataTable." (с) Intuit.ru
:( По моему ADO это одна большая какашка Это сообщение отредактировал(а) Afrodiziac - 23.4.2008, 19:02 |
|||
|
||||
| informatik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.11.2007 Репутация: 1 Всего: 6 |
Интересный вопрос.... Ответ: ДА. А ты хочешь для всех таблиц иметь одну и ту же команду SELECT... клас..... --------------------
namespace informatik |
|||
|
||||
| Afrodiziac |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.5.2007 Репутация: нет Всего: нет |
Хорошо, пусть я создал кучу адаптеров
подготовил датасет
и сделал общую функцию инициализации адаптера
к примеру вызываем ее так
А если мне понадобится сделать какой-то специфический запрос к таблице TableNotifys, я же не смогу использовать соответствующий адаптер _daTableNotifys? в том плане, что _daTableNotifys.SelectCommand.CommandText придется изменять... Добавлено через 8 минут и 40 секунд Пока что решение такое. 1. Из БД забираю данные с помощью такой процедуры
2. Узнав всю необходимую информацию, такую как ID, мы можем сохранять изменения в БД.
Гууд? |
||||||||||||
|
|||||||||||||
| akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Залезь в редактирование схемы, нажми по правой кнопке "Add->TableAdapter" (или "Add->Query", не помню точно, как делается), отредактируй у него "SelectCommand" (сообразно логике задачи, возможно указание параметров еще на стадии проектирования, количество таблиц из физической БД практически не ограничено), перепиши InsertCommand, UpdateCommand и deleteCommand (по необходимости, могут быть как простые запросы, так и встроенные процедуры, параметры возможны), а затем юзай как тебе заблагорассудится, но в стандартной манере.
необязательно. Если логика таблиц на уровне приложения не требует изменения таблицы БД, то Insert и Delete.... если таблица мусор или не нуждается в конкретном отдельном присутствии в датасете, то...
Лучшее - враг хорошего. Если на клетке со слоном написано крокодил, не верь глазам своим. -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
а я б сделал хранимку на базе и не парился бы (и модификация базы проще и гемора меньше).
ну и соотвественно дергал бы ее.... еще вариант сделать View в базе чтобы сразу брать с него данные (в том виде которй вам уже нужен). +для view можно будет сделать индекс (+к производительности, -к простоте изменения структуры базы). кстати, view можно сделать очень хитрый... например завести стец табличку где хранить дату последней отсылки сообщений, а view строить по усливию where LastSentDateTime<row.updated .... да вариантов тьма... все зависит от того что вам надо : мленькая база или высокая производительность на выборку.... Это сообщение отредактировал(а) jonie - 24.4.2008, 22:50 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |