![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
Итак, я новичек в C# 8-)
Возникла простетская задачка : имеется две таблицы , "соединенные" по ключу (1-N) (ms sql05) Грузить данные из подчиненной таблицы стоит естественно только по условию из первой таблицы)... Вот тут и возник вопрос : как кешировать данные ? (не стоит же грузить каждый раз данные, которые были ранее выбраны из бд (если возникает нужда в их повторном использовании)) Как это делается в .NET красиво? ---- как пример : имеем на форме combobox и listbox. combobox ===> главная таблица listbox - подчиненная, оторажает в зависимости от выбранного в combobox грузить дважды при выборе одного и тогоже значения в combobox я не вижу смысла (обращение к бд . фырк)).... так как откешировать? ламерский вопрос, я пологаю что DataSet вполне поможет, однако интересно как это делается в реальности 8) уж больно не хочу наступать на грабли 8) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Практика показывает что чем проще код, тем лучше (и быстрее). Поэтому если особой нужды в датасете нет, можно поюзать Dictionary.
-------------------- ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
всеж предпочел бы датасет, ну так как то же можно сделать.... разве нет?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
DataSet используй. Он для работы в отсоединенном от СУБД режиме и придуман. через DataSet.
ты или работаешь с данными DataSet-а, загруженными ранее, или вызываешь команды обновления DataSet-a и потом все равно с ним, обновленным, работаешь. Я не понимаю в чем трудность? Тебе, jonie, DataSet-а мало? хочешь свои хранилища создать для данных. Зачем? Придумана прекрасная технология ADO.NET, кеширование организовано в ее корне, специально датасеты разработаны. Что еще нужно? Чтоб провайдер данных сам угадывал, случайно юзер кнопочку нажал (и обновлять данные из СУБД он на самом деле не хочет) или намеренно (ну тогда, что ж, прийдется обновить)? ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
tol05,
А чуть чуть поподробнее можно. А то может я не использую его возможностей по полной. Если база используется несколькими пользователями, то при начале работы с программой каждый пользователь загрузил нужные ему данные в память(ДС) и работает, при этом периодически записывает в базу новые данные. Соответственно остальным пользователям периодически нужно обновлять имеющиеся у них данные. И что бы не тянуть всю таблицу(ы) по-новой, лучше пополнить ДС только новыми строками. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
трудность как раз в
как узнать что данные уже были в DataSet и лишь их дополнить???! -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
в общем решение такое (для 2-х связанный таблиц, сгенерированный датасет строгий):
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
thomas, я имел в виду что датасет является кешом данных для приложения (отделенное хранилище данных СУБД, данные для работы после заполнения датасета берутся из него и быстрее чем из СУБД)
потом кеш обновляется dataAdapter.Update(dataSet); достаточно ли ясно (для "почти доцента") я изложил свои мысли? по поводу высказываний типа "Ах, как было бы хорошо, если бы не..." и подобных: читаем msdn "Updating Data Sources with DataAdapters "
P.S. Если таблица А меняется редко, а таблица В - часто, то и обновлять нужно не датасет целиком, а таблицу В отдельно
но это нужно адаптеру указывать явно, иначе как адаптер сможет гарантировать, что пока он не обращался к СУБД, таблица А не менялась? Он должен затребовать из СУБД все данные и сравнить полученные со своими существующими. Это сообщение отредактировал(а) tol05 - 1.10.2007, 09:01 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
вариант 2 :
добавить в первую таблицу доп столбец "была или нет подкачена данные дочерней таблицы". -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |