2007 г.
Марченко Антон Леонардович
Интернет-Университет Информационных Технологий, INTUIT.ru
Назад Оглавление Вперёд
DataSet
В рамках отсоединенной модели ADO .NET объект DataSet
становится важным элементом технологии отсоединенного доступа. Объект-представитель DataSet
ПРЕДСТАВЛЯЕТ МНОЖЕСТВО ТАБЛИЦ.
Для успешного решения задачи представления в DataSet
'е есть все необходимое. Его функциональные возможности позволяют загрузить в локальное хранилище на стороне приложения данные из любого допустимого для ADO .NET источника: SQL Server, Microsoft Access, XML-файл.
В числе данных – членов этого класса имеется набор Tables
. Объект DataSet
может содержать таблицы, количество которых ограничивается лишь возможностями набора Tables
.
Для каждой таблицы – элемента набора Tables
может быть (и, естественно, должна быть) определена структура таблицы. В случае, когда приложение взаимодействует с реальной базой данных, структура таблиц в DataSet
'е должна соответствовать структуре таблиц в базе данных. DataSet
– это находящийся в памяти объект ADO .NET, используемый в приложении для представления данных; он определяет согласованную реляционную модель базы данных, которая не зависит от источника содержащихся в нем данных. Степень полноты модели определяется задачами, которые решает приложение.
Объект DataSet
может представлять абсолютно точную модель базы данных, и в таком случае эта модель должна будет включать полный набор структурных элементов базы данных, включая таблицы, содержащие данные, с учетом установленных ограничений и отношений между таблицами.
Содержащуюся в объекте DataSet
информацию можно изменять независимо от источника данных (от самой БД). Соответствующие значения формируются непосредственно в программе и добавляются в таблицы.
При работе с базой данных данные могут собираться из разных таблиц, локальное представление которых обеспечивается различными объектами – представителями классов DataSet
. В классе DataSet
определено множество перегруженных методов Merge
, которые позволяют объединять содержимое нескольких объектов DataSet
.
Любой объект-представитель класса DataSet
позволяет организовать чтение и запись содержимого (теоретически – информации из базы) в файл или область памяти. При этом можно читать и сохранять:
- только содержимое объекта (собственно информацию из базы);
- только структуру объекта – представителя класса
DataSet
; - полный образ DataSet (содержимое и структуру).
Таким образом, DataSet
является основой для построения различных вариантов отсоединенных объектов – хранилищ информации.
Класс DataSet
– класс не абстрактный и не интерфейс. Это значит, что существует множество вариантов построения отсоединенных хранилищ.
На основе базового класса DataSet
можно определять производные классы определенной конфигурации, которая соответствует структуре базы данных.
Можно также создать объект – представитель класса DataSet
оригинальной конфигурации и добавить непосредственно к этому объекту все необходимые составляющие в виде таблиц (объектов – представителей класса Table
) соответствующей структуры и множества отношений Relation
.
Объект – представитель класса DataSet
и сам по себе, без сопутствующего окружения, представляет определенную ценность. Дело в том, что информация, представляемая в приложении в виде таблиц, НЕ ОБЯЗЯТЕЛЬНО должна иметь внешний источник в виде реальной базы данных. Ничто не мешает программисту обеспечить в приложении чтение обычного "плоского" файла или даже "накопить" необходимую информацию посредством интерактивного взаимодействия с пользователем, используя при этом обычный диалог. В конце концов, база данных – это один из возможных способов ОРГАНИЗАЦИИ информации (а не только ее хранения!). Не случайно DataSet
представляет ОТСОЕДИНЕННЫЕ данные.
На DataSet
работают все ранее перечисленные компоненты ADO .NET.
В свою очередь, в приложении, обеспечивающем взаимодействие с базой данных, объект DataSet
функционирует исключительно за счет объекта DataAdapter
, который обслуживает DataSet
.
При этом DataAdapter является центральным компонентом архитектуры отсоединенного доступа.
Структура класса DataSet
База данных характеризуется множеством таблиц и множеством отношений между таблицами.
DataSet
(как объявление класса) включает:
- набор (возможно, что пустой) объявлений классов
DataTable
(фактически это описание структуры составляющих данный КЛАСС DataSet
таблиц), - набор объявлений классов
DataRelations
, который обеспечивает установку связей между разными таблицами в рамках данного DataSet
.
Структура DataSet
может в точности повторять структуру БД и содержать полный перечень таблиц и отношений, а может быть частичной копией БД и содержать, соответственно, лишь подмножество таблиц и подмножество отношений. Все определяется решаемой с помощью данного DataSet
задачей.
При всем этом следует иметь в виду, что DataSet
, структура которого полностью соответствует структуре БД (ИДЕАЛЬНАЯ DataSet
), никогда не помешает решению поставленной задачи. Даже если будет содержать излишнюю информацию.
Процесс объявления (построения) класса DataSet
, который ПОДОБЕН структуре некоторой базы данных, является достаточно сложным и трудоемким. Класс – структурная копия БД содержит множество стандартных и трудных для ручного воспроизведения объявлений. Как правило, его объявление строится с использованием специальных средств-волшебников, которые позволяют оптимизировать и ускорять процесс воспроизведения структуры БД средствами языка программирования. В конечном счете появляется все то же объявление класса, над которым также можно медитировать и (осторожно!) изменять его структуру.
Объект – представитель данного класса DataSet
обеспечивает представление в памяти компьютера фрагмента данной БД. Этот объект является локальным представлением (фрагмента) БД.
Члены класса DataSet
представлены ниже.
Открытые конструкторыDataSet -конструктор | Перегружен. Инициализирует новый экземпляр класса DataSet |
Открытые свойстваCaseSensitive | Возвращает или задает значение, определяющее, учитывается ли регистр при сравнении строк в объектах DataTable |
Container (унаследовано от MarshalByValueComponent ) | Получает контейнер для компонента |
DataSetName | Возвращает или задает имя текущего DataSet |
DefaultViewManager | Возвращает новое представление данных класса DataSet для осуществления фильтрации, поиска или перехода с помощью настраиваемого класса DataViewManager |
DesignMode (унаследовано от MarshalByValueComponent ) | Получает значение, указывающее, находится ли компонент в настоящий момент в режиме разработки |
EnforceConstraints | Возвращает или задает значение, определяющее соблюдение правил ограничения при попытке совершения операции обновления |
ExtendedProperties | Возвращает коллекцию настраиваемых данных пользователя, связанных с DataSet |
HasErrors | Возвращает значение, определяющее наличие ошибок в любом из объектов DataTable в классе DataSet |
Locale | Возвращает или задает сведения о языке, используемые для сравнения строк таблицы |
Namespace | Возвращает или задает пространство имен класса DataSet |
Prefix | Возвращает или задает префикс XML, который является псевдонимом пространства имен класса DataSet |
Relations | Возвращает коллекцию соотношений, связывающих таблицы и позволяющих переходить от родительских таблиц к дочерним |
Site | Переопределен. Возвращает или задает тип System.ComponentModel.ISite для класса DataSet |
Tables | Возвращает коллекцию таблиц класса DataSet |
Открытые методы AcceptChanges | Сохраняет все изменения, внесенные в класс DataSet после его загрузки или после последнего вызова метода AcceptChanges |
Clear | Удаляет из класса DataSet любые данные путем удаления всех строк во всех таблицах |
Clone | Копирует структуру класса DataSet , включая все схемы, соотношения и ограничения объекта DataTable . Данные не копируются |
Copy | Копирует структуру и данные для класса DataSet |
Dispose (унаследовано от MarshalByValueComponent ) | Перегружен. Освобождает ресурсы, использовавшиеся объектом MarshalByValueComponent |
Equals (унаследовано от Object ) | Перегружен. Определяет, равны ли два экземпляра Object |
GetChanges | Перегружен. Возвращает копию класса DataSet , содержащую все изменения, внесенные после его последней загрузки или после вызова метода AcceptChanges |
GetHashCode (унаследовано от Object ) | Служит хэш-функцией для конкретного типа, пригоден для использования в алгоритмах хэширования и структурах данных, например в хэш-таблице |
GetService (унаследовано от MarshalByValueComponent ) | Получает реализацию объекта IServiceProvider |
GetType (унаследовано от Object ) | Возвращает Type текущего экземпляра |
GetXml | Возвращает XML-представления данных, хранящихся в классе DataSet |
GetXmlSchema | Возвращает XSD-схему для XML-представление данных, хранящихся в классе DataSet |
HasChanges | Перегружен. Возвращает значение, определяющее наличие изменений в классе DataSet , включая добавление, удаление или изменение строк |
InferXmlSchema | Перегружен. Применяет XML-схему к классу DataSet |
Merge | Перегружен. Осуществляет слияние указанного класса DataSet , DataTable или массива объектов DataRow с текущим объектом DataSet или DataTable |
ReadXml | Перегружен. Считывает XML-схему и данные в DataSet |
ReadXmlSchema | Перегружен. Считывает XML-схему в DataSet |
RejectChanges | Отменяет все изменения, внесенные в класс DataSet после его создания или после последнего вызова метода DataSet.AcceptChanges |
Reset | Сбрасывает DataSet в исходное состояние. Для восстановления исходного состояния класса DataSet необходимо переопределить метод Reset в подклассах |
ToString (унаследовано от Object ) | Возвращает String , который представляет текущий Object |
WriteXml | Перегружен. Записывает XML-данные и по возможности схемы из DataSet |
WriteXmlSchema | Перегружен. Записывает структуру класса DataSet в виде XML-схемы |
Открытые события Disposed (унаследовано от MarshalByValueComponent ) | Добавляет обработчик событий, чтобы воспринимать событие Disposed на компоненте |
MergeFailed | Возникает, если значения первичного ключа конечного и основного объектов DataRow совпадают, а свойство EnforceConstraints имеет значение true |
Защищенные конструкторы DataSet-конструктор | Перегружен. Инициализирует новый экземпляр класса DataSet |
Защищенные свойства Events (унаследовано от MarshalByValueComponent ) | Получает список обработчиков событий, которые подключены к этому компоненту |
Защищенные методы Dispose (унаследовано от MarshalByValueComponent ) | Перегружен. Освобождает ресурсы, использовавшиеся объектом MarshalByValueComponent |
Finalize (унаследовано от Object ) | Переопределен. Позволяет объекту Object попытаться освободить ресурсы и выполнить другие завершающие операции, перед тем как объект Object будет уничтожен в процессе сборки мусора В языках C# и C++ для функций финализации используется синтаксис деструктора |
MemberwiseClone (унаследовано от Object ) | Создает неполную копию текущего Object |
OnPropertyChanging | Вызывает событие OnPropertyChanging |
OnRemoveRelation | Возникает при удалении объекта DataRelation из DataTable |
OnRemoveTable | Возникает при удалении объекта DataTable из DataSet |
RaisePropertyChanging | Посылает уведомление об изменении указанного свойства DataSet |
ShouldSerializeRelations | Возвращает значение, определяющее необходимость сохранения значения свойства Relations |
ShouldSerializeTables | Возвращает значение, определяющее необходимость сохранения значения свойства Tables |
Явные реализации интерфейса
System.ComponentModel.IListSource.ContainsListCollection
Назад Оглавление Вперёд