Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_CSharp_4.docx
Скачиваний:
38
Добавлен:
02.11.2018
Размер:
237.61 Кб
Скачать

4.6. Рассоединенный набор данных

ADO.NET предоставляет возможность работы с рассоединенным набором данных. Такой набор реализуется объектом класса DataSet. Это реляционная структура, которая хранится в памяти. DataSet содержит набор таблиц (объектов класса DataTable) и связей между таблицами (объекты класса DataRelation). В свою очередь, отдельная таблица содержит набор столбцов (объекты класса DataColumn), строк (объекты класса DataRow) и ограничений (объекты классов, унаследованных от Constraint). Столбцы и ограничения описывают структуру отдельной таблицы, а строки хранят данные таблицы.

Технически, отдельные компоненты DataSet хранятся в специализированных коллекциях. Например, DataSet содержит коллекции Tables и Relations. Таблица имеет коллекции Columns (для колонок), Rows (для строк), Constraints (для ограничений), ParentRelations и ChildRelations (для связей таблицы). Любая подобная коллекция обладает сходных набором свойств и методов. Коллекции имеют перегруженные индексаторы для обращения к элементу по номеру и по имени, методы добавления, поиска и удаления элементов. Методы добавления перегружены и обеспечивают как добавление существующего объекта, так и автоматическое создание соответствующего объекта перед помещением в коллекцию.

Для набора данных DataSet введём понятие схемы данных. Под схемой будем понимать совокупность следующих элементов:

  • Имена таблиц;

  • Тип и имя отдельных столбцов таблицы;

  • Ограничения на столбцы таблицы: уникальность, отсутствие пустых значений, первичные и внешние ключи;

  • Связи между таблицами;

  • События набора данных и таблицы, которые происходят при работе со строками (аналоги триггеров в базах данных).

Схема данных может быть определена различными способами:

  • Вручную, путем создания и настройки свойств столбцов, таблиц, связей;

  • Автоматически, при загрузке данных в набор из базы;

  • Загрузкой схемы, которая была создана и сохранена ранее в XSD-файле.

Правильно созданная схема обеспечивает контроль целостности данных в приложении перед их загрузкой в базу. К сожалению, при загрузке данных из базы в пустой набор генерируется только часть схемы данных (например, в схеме будут отсутствовать связи между таблицами). Рекомендуется подход, при котором в пустом наборе программно создается полная схема, и только затем в этот набор производится считывание данных.

4.7. Объект класса DataColumn – колонка таблицы

Структура любой таблицы описывается свойствами ее столбцов. Столбец таблицы представлен объектом класса DataColumn. Этот класс содержит следующий набор свойств, перечисленных в табл. 6.

Таблица 6

Свойства класса DataColumn

Имя свойства

Тип

Описание

AllowDBNull

bool

Задаёт, возможны ли в столбце пустые значения

AutoIncrement

bool

Генерируется ли для столбца новое значение автоприращения

AutoIncrementSeed

int

Начальное значение автоприращения

AutoIncrementStep

Int

Шаг автоприращения

Caption

string

Заголовок столбца, отображаемый в элементах управления

ColumnMapping

MappingType

Определяет, как будет записано содержимое столбца в XML-документ

ColumnName

string

Имя столбца в таблице

DataType

Type

Тип данных столбца

DefaultValue

object

Значение по умолчанию в столбце

Expression

string

Выражение для вычисляемых столбцов

MaxLength

int

Максимальная длина строковых данных в столбце

Namespace

string

Имя пространства имен XML, используемого при загрузке и чтении столбца из XML-файла

Ordinal

int

Порядковый номер столбца в таблице

Prefix

string

Префикс пространства имен XML; используется при загрузке и чтении столбца из XML-файла

ReadOnly

bool

Указывает, что содержимое столбца доступно только для чтения

Table

DataTable

Таблица, в состав которой входит столбец

Unique

bool

Должно ли быть значение в столбце уникальным в пределах таблицы

«Ручное» создание объектов-столбцов используется при самостоятельном формировании схемы DataSet. Минимально допустимая настройка столбца заключается в указании его имени и типа данных1. После этого столбец может быть добавлен в таблицу (при этом заполнятся свойства Ordinal и Table).

var dc = new DataColumn

{ ColumnName = "New Column", DataType = typeof(int) };

var dt = new DataTable();

dt.Columns.Add(dc);

Можно указать значение по умолчанию в столбце – свойство столбца DefaultValue. Если свойство AllowDBNull установлено в true, то допустимы пустые значения столбца (столбец может содержать объект класса DBNull2).

Свойства AutoIncrement, AutoIncrementSeed и AutoIncrementStep используются для организации автоматического приращения значений столбца (по умолчанию автоприращение не активно). Тип свойства с автоприращением должен быть целочисленным. Автоприращение может быть полезно при организации первичного ключа таблицы2.

При работе с набором данных существует возможность сохранить его в виде XML-документа. Свойство ColumnMapping настраивает представление столбца при сохранении. Следующий код обеспечивает сохранение значений столбца id в виде атрибута:

id.ColumnMapping = MappingType.Attribute;

К свойствам для поддержки работы с XML относятся также свойства Namespace и Prefix.

Для хранения столбцов класс DataTable использует свойство Columns типа DataColumnCollection. Добавлять столбцы можно по одному (метод коллекции Add()) или целым массивом (метод AddRange()). Кроме этого, метод Add() имеет удобную перегруженную версию, которая позволяет неявно создать столбец, указав его имя и тип.