Как правило, в приложениях необходимо извлечь информацию из базы данных и выполнить с ней некоторые действия:
ü показать пользователю на экране монитора,
ü сделать нужные расчеты или
ü послать данные в другой компонент.
Очень часто в приложении нужно обработать не одну запись, а их набор:
· список клиентов,
· перечень заказов,
· набор элементов заказа и т. п.
Как правило, в приложениях требуется одновременная работа с более чем одной таблицей, т.е. с набором связанных данных:
· клиенты и все их заказы;
· и все его книги,
· заказ и его элементы,
Причем для удобства пользователя данные требуется группировать и сортировать то по одному, то по другому признаку. При этом нерационально каждый раз возвращаться к исходной базе данных и заново считывать данные. Более практично работать с некой временной "вырезкой" информации, хранящейся в оперативной памяти компьютера.
Эту роль выполняет набор данных - DataSet, который представляет собой своеобразный кэш записей, извлеченных из базового источника. DataSet может состоять из одной или более таблиц, он имеет дело с копиями таблиц из базы данных источника. Кроме того, в данном объекте могут содержаться связи между таблицами и некоторые ограничения на выбираемые данные. Структура объекта DataSet приведена на рисунке 8.3.
|
|
Рис. 8.3. Структура объекта DataSet
Данные в DataSet - это некий уменьшенный вариант основной базы данных. Тем не менее, вы можете работать с такой "вырезкой" точно так же, как и с реальной базой. Поскольку каждый пользователь манипулирует с полученной порцией информации, оставаясь отсоединенными от основной базы данных, последняя может в это время решать другие задачи.
Конечно, практически в любой задаче обработки данных требуется корректировать информацию в базе данных (хотя и не так часто, как извлекать данные из нее). Вы можете выполнить операции коррекции непосредственно в DataSet, a потом все внесенные изменения будут переданы в основную базу данных.
Важно отметить то, что DataSet - пассивный контейнер для данных, который обеспечивает только их хранение.
Что же нужно поместить в этот контейнер, определяется в другом объекте - адаптере данных DataAdapter. В адаптере данных содержатся одна или более команд, которые определяют:
· какую информацию нужно поместить в таблицы объекта DataSet,
· по каким правилам нужно синхронизировать информацию в конкретной таблице DataSet и соответствующей таблицей основной базы данных и т. п.
Адаптер данных обычно содержит четыре команды SELECT, INSERT, UPDATE, и DELETE для выборки, добавления, корректировки и удаления записей.
Например, метод Fill объекта DataAdapter, заполняющего данными контейнер DataSet, может использовать в элементе SelectCommand следующий запрос:
|
|
SELECT au_id, au_lname, au_fname FROM authors
Набор данных DataSet - "независимая" копия фрагмента базы данных, расположенная на компьютере пользователя. Причем в этой копии могут быть не отражены те изменения, которые могли внести в основную базу данных другие пользователи.
Если требуется увидеть самые последние изменения, сделанные другими пользователями, то необходимо "освежить" DataSet, повторно вызвав метод Fill адаптера данных.