Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5677 / 802 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 18:

Основы ADO .NET

< Лекция 17 || Лекция 18: 123456789101112

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
< Лекция 17 || Лекция 18: 123456789101112
kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2