Замечание. Класс DataTable также поддерживает расширение свойств с помощью свойства ExtendedProperties.
Перед погружением в многочисленные детали программирования давайте рассмотрим набор базовых членов 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 представляет отдельный столбец в пределах DataTable. Вообще говоря, набор всех типов DataColumn в границах данного типа DataTable представляет собой структуру таблицы. Например, чтобы представить таблицу Inventory базы данных Cars, вы должны создать четыре типа DataColumn, по одному для каждого столбца этой таблицы (CarID, Make, Color и PetName). После создания объектов DataColumn они добавляются в коллекцию столбцов типа DataTable (с помощью свойства Columns).
Имея определенную подготовку в области теории реляционных баз данных, вы должны знать, что столбцу в таблице данных можно назначить набор ограничений (например, использовать столбец в качестве первичного ключа, задать значение по умолчанию, потребовать, чтобы информация в столбце была доступна только для чтения и т.д.). Также каждый столбец в таблице должен соответствовать заданному для него типу данных. Например, структура таблицы Inventory требует, чтобы значения столбца CarID были целыми числами, а значения Make, Color и PetName – наборами символов. Класс DataColumn имеет множество свойств, которые позволяют выполнить соответствующие настройки. Описания основных свойств этого типа приведены в табл. 22.11.
Читать дальше