Чтение онлайн

на главную - закладки

Жанры

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

Упрощенно говоря, DataSet является представлением внешних данных в памяти. Более точно, DataSet представляет собой тип класса, поддерживающий три внутренние строго типизованные коллекции (рис. 22.11).

Рис. 22.11. "Анатомия" DataSet

Свойство Tables объекта DataSet позволяет получить доступ к коллекции DataTableCollection, содержащей отдельные объекты DataTable. Другой важной коллекцией DataSet является DataRelationCollection. Ввиду того, что объект DataSet является "отсоединенным" образом структуры базы данных, можно программно представлять родительски-наследственные связи между таблицами. Например, с помощью типа DataRelation можно создать отношение между двумя таблицами, моделирующее ограничение внешнего ключа, Соответствующий объект можно затем добавить в DataRelationCollection с помощью свойства Relations. После этого вы сможете осуществлять переходы между соединенными таблицами при поиске данных. Как это реализуется на практике, будет

доказано немного позже.

Свойство ExtendedProperties обеспечивает доступ к объекту Property-Collection, который позволяет ассоциировать с DataSet любую дополнительную информацию, используя пары имен и значений. Эта информация может быть практически любой, и даже вообще не иметь никакого отношений к данным. Например, можно связать с DataSet название вашей компании, которое в этом случае может выступать в роли включенных в память метаданных. Другими примерами таких расширенных свойств могут быть штамп даты/времени, шифрованный пароль, который необходимо будет указать для доступа к содержимому DataSet, число, задающее частоту обновления данных, и т.д.

Замечание. Класс DataTable также поддерживает расширение свойств с помощью свойства ExtendedProperties.

Члены DataSet

Перед погружением в многочисленные детали программирования давайте рассмотрим набор базовых членов DataSet. Кроме свойств Tables, Relations и ExtendedProperties, в табл. 22.9 описаны некоторые другие интересные свойства.

Таблица 22.9. Свойства DataSet

Свойство Описание
CaseSensitive Индикатор чувствительности к регистру cимволов при сравнении строк в объектах DataTable
DataSetName Представляет понятное имя данного объекта DataSet. Обычно это значение устанавливается c помощью параметров конструктора
EnforceConstraints Получает или устанавливает значение, являющееся индикатором необходимости применения заданных ограничений при любой операции обновления
HasErros Получает значение, являющееся индикатором наличия ошибок в любой из строк объектов DataTable для объекта DataSet
RemotingFormat Новое свойство .NET 2.0, позволяющее указать, как должна выполняться сериализация DataSet (в двоичном или XML-формате) для слоя удаленного взаимодействия .NET

Методы DataSet воспроизводят некоторые функциональные возможности, обеспечиваемые вышеупомянутыми свойствами. В дополнение к взаимодействию с потоками XML, объект DataSet предлагает методы, позволяющие копировать/клонировать содержимое DataSet, а также устанавливать начальные и конечные точки пакетных обновлений. В табл. 22.10 даются описания некоторых из таких методов.

Таблица 22.10. Методы DataSet 

Методы Описание
AcceptChanges Фиксирует все изменения, сделанные в данном объекте DataSet с момента его загрузки или последнего вызова AcceptChanges
Clear Выполняет полную очистку данных DataSet путем удаления всех строк в каждом объекте DataTable
Clone Клонирует структуру DataSet, включая все объекты DataTable, а также все отношения и ограничения
Copy Копирует и структуру, и данные для имеющегося объекта DataSet
GetChanges Возвращает копию DataSet, содержащую все изменения, сделанные со времени последней загрузки или последнего вызова AcceptChanges
GetChildRelations Возвращает коллекцию дочерних связей для указанной таблицы
GetParentRelations Возвращает коллекцию родительских связей для указанной таблицы
HasChanges Перегруженный метод, который возвращает значение, являющееся индикатором наличия модификаций у DataSet, учитывая новые, удаленные или измененные строки
Merge Перегруженный метод, который выполняет слияние данного объекта DataSet с указанным объектом DataSet
ReadXml ReadXmlSchema Позволяют считывать XML-данные из действительного потока (файлового, размещенного в памяти или сетевого) в DataSet
RejectChanges Выполняет откат всех изменений, сделанных в DataSet с момента его создания или последнего вызова DataSet.AcceptChanges
WriteXml WriteXmlSchema Позволяют записать содержимое DataSet в действительный поток

Теперь вы лучше понимаете роль DataSet (и имеете некоторое представление о том, что можно делать с этим объектом), и мы можем приступить к созданию нового консольного приложения под

названием SimpleDataSet. В его методе Main определяется новый объект DataSet, содержащий два расширенных свойства, представляющих название вашей компании и штамп времени (не забудьте указать using для System.Data).

class Program {

 static void Main(string[] args) {

Console.WriteLine ("***** Забавы с DataSet *****\n");

// Создание объекта DataSet.

DataSet carsInventoryDS = new DataSet("Inventory из Car");

carsInventoryDS.ExtendedProperties["TimeStamp"] = DateTime.Now;

carsInventoryDS.ExtendedProperties["Company"] = "Intertech Training";

 }

}

Объект DataSet без объектов DataTable чем-то напоминает рабочую неделю без выходных. Поэтому следующей нашей задачей будет рассмотрение внутренней структуры DataTable, начиная с типа DataColumn.

Работа с DataColumn

Тип DataColumn представляет отдельный столбец в пределах DataTable. Вообще говоря, набор всех типов DataColumn в границах данного типа DataTable представляет собой структуру таблицы. Например, чтобы представить таблицу Inventory базы данных Cars, вы должны создать четыре типа DataColumn, по одному для каждого столбца этой таблицы (CarID, Make, Color и PetName). После создания объектов DataColumn они добавляются в коллекцию столбцов типа DataTable (с помощью свойства Columns).

Имея определенную подготовку в области теории реляционных баз данных, вы должны знать, что столбцу в таблице данных можно назначить набор ограничений (например, использовать столбец в качестве первичного ключа, задать значение по умолчанию, потребовать, чтобы информация в столбце была доступна только для чтения и т.д.). Также каждый столбец в таблице должен соответствовать заданному для него типу данных. Например, структура таблицы Inventory требует, чтобы значения столбца CarID были целыми числами, а значения Make, Color и PetName – наборами символов. Класс DataColumn имеет множество свойств, которые позволяют выполнить соответствующие настройки. Описания основных свойств этого типа приведены в табл. 22.11.

Таблица 22.11. Свойства DataColumn

Свойства Описание
AllowDBNull Индикатор того, что строка в этом столбце может содержать значение null. Значением по умолчанию является true
AutoIncrement AutoInсrementSeed AutoIncrementStep Используются для настройки автоприращения для данного столбца, когда нужно гарантировать уникальность значений в данном объекте DataColumn (например, для первичного ключа). По умолчанию в DataColumn автоприращение не выполняется
Caption Читает или устанавливает текст заголовка, который должен отображаться для данного столбца (например, текст, который увидит конечный пользователь, в DataGridView)
Определяет представление DataColumn при сохранении DataSet в виде XML-документа с помощью метода DataSet.WriteXml
ColumnName Читает или устанавливает имя столбца в коллекции Columns (т.е. его представление в DataTable). Если не установить ColumnName явно, значением по умолчанию будет Column с номером столбца (т.е. Column1, Column2, Column3 и т.д.)
DataType Определяет тип данных, хранимых в столбце (логический, строковый, числовой с плавающей точкой и т.д.)
DefaultValue Читает или устанавливает значение, которое должно приписываться по умолчанию для данного столбца при вставке новых строк. Это значение используется тогда, когда не указано иное
Expression Читает или устанавливает выражение, используемое для фильтрации строк, вычисления значений столбца или создания агрегированных столбцов
Ordinal Возвращает числовую позицию столбца в коллекции Columns, поддерживаемой объектом DataTable
ReadOnly Индикатор запрета изменения содержимого столбца после добавления строки в таблицу. Значением по умолчанию является false
Table Возвращает объект DataTable, содержащий данный объект DataColumn
Unique Индикатор требования уникальности значений в данном столбце. Если столбцу назначается ограничение первичного ключа, свойству Unique должно быть назначено значение true

Создание DataColumn

Чтобы продолжить работу с проектом SimpleDataSet (и привести пример использования DataColumn), предположим, что нам нужно представить столбцы таблицы Inventory. Учитывая то, что столбец CarID является первичным ключом таблицы, мы сделаем объект DataColumn доступным только для чтения, с ограничением уникальности и не допускающим ввода значений null (используя свойства ReadOnly, Unique и AllowDBNull). Обновите метод Main так, чтобы построить четыре объекта DataColumn.

Поделиться:
Популярные книги

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Я сделаю это сама

Кальк Салма
1. Магический XVIII век
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Я сделаю это сама

Кровь на эполетах

Дроздов Анатолий Федорович
3. Штуцер и тесак
Фантастика:
альтернативная история
7.60
рейтинг книги
Кровь на эполетах

Сыночек в награду. Подари мне любовь

Лесневская Вероника
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени