Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Объект адаптера данных вашего поставщика данных обрабатывает соединение с базой данных автоматически. С целью расширения возможностей масштабируемости адаптеры данных сохраняют соединение открытым минимально возможное время. Как только вызывающая сторона получает объект DataSet, соединение с СУБД разрывается, и вызывающая сторона остается со своей локальной копией удаленных данных. Вызывающая сторона может вставлять, удалять и модифицировать данные DataTable, но физически база данных не будет обновлена до тех пор. пока вызывающая сторона не передаст явно объект DataSet адаптеру данных для обновления. В сущности, DataSet позволяет клиенту имитировать постоянно открытое соединение, в то время как реальные операции выполняются с наборами данных, находящимися в памяти (рис. 22.10).

Рис. 22.10. Объекты адаптера данных передают объекты DataSet клиенту и возвращают их обратно базе данных
Поскольку основным элементом несвязного уровня является тип DataSet, нашей следующей задачей будет выяснение того, как управлять объектом DataSet вручную. Если вы поймете, как это делается, то не будете испытывать никаких проблем При манипуляциях содержимым DataSet, извлеченным из объекта адаптера данных.
Роль DataSet
Упрощенно говоря, 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";
}
}
Интервал:
Закладка: