ADO.NET (ActiveX Data Objects) является последней в цепочке технологий управления данными, которые разработала компания Microsoft.
Эта технология построена на концепции управления данными в рамках распределенных Web-приложений. Данные характеризуются слабой связанностью и задержками, вызванными необходимостью передачи по сети. Соединение с базой в таких приложениях является дорогим, лимитным (и лимитирующим) ресурсом. Предыдущие технологии доступа к данным строились на основе принципа, в котором по умолчанию потребитель имеет постоянную связь с источником данных. Отключение от источника в таких условиях обычно происходит в момент окончания работы с данными. По мере роста числа пользователей баз данных и усложнения приложений, которые потребляют эти данные, режим постоянной связи с источником становится все более неэффективным и, поэтому, дорогим.
ADO.NET строится на основе другого принципа, в котором по умолчанию потребитель отсоединен от источника. Он подключается к нему только в те моменты, когда необходимо прочесть или обновить данные. Минимизируя время соединения с источником, ADO.NET сохраняет общие ресурсы системы и поддерживает высокую эффективность работы с ней. Возможность работать с источниками данных в отсоединенном режиме (disconnected mode) считается одним из главных достоинств ADO.NET.
В концептуальной модели, или архитектуре ADO.NET выделяют две функциональные группы объектов: поставщики данных (data providers) и потребители данных (data consumers). Они поддержаны классами, обитающими в нескольких пространствах имен. Эти пространства в свою очередь вложены в пространство имен System.Data. Следующая схема иллюстрирует вложенность пространств.
Роль потребителя данных на локальном компьютере играет класс DataSet из пространства System.Data. Он реализует функциональность отсоединенной от источника реляционной структуры данных. Возможности, предоставляемые классом, не зависят от природы источника данных и способа, которым они получены. Наборы данных (Datasets) хранят слепок базы данных в отсоединенном кэше. Структура набора сходна со структурой исходной реляционной базы данных. Она представляет собой иерархическую модель таблиц, связей и ограничений (constraints).
Класс DataSet реализует функциональность реляционной структуры данных в памяти со встроенной поддержкой языка XML (Extensible Markup Language). С объектами класса DataSet весьма удобно работать в отсоединенном режиме, так как они позволяют хранить свои данные на постоянном носителе в формате XML. DataSet содержит в себе коллекцию объектов класса DataTable. Каждый объект класса DataTable содержит либо некий снимок (snapshot) реальной таблицы базы данных, либо данные, полученные из какого-то другого источника (XML-документа, динамической коллекции, массива). На начальной стадии изучения целесообразно генерировать данные DataSet на основе стандартных коллекций, или обычного массива.
Благодаря умению хранить данные в формате XML и передавать их в этом формате между компонентами многослойного (multi-tier), распределенного приложения, DataSet является идеальным решением проблемы передачи данных между программами, работающими на разных платформах.
Однако классы DataSet и DataTable имеют ограниченные возможности. Для выбора и фильтрации данных вы можете использовать метод Select, а для навигации по иерархии связанных таблиц существуют методы: GetChildRows и GetParentRow. Для более сложных манипуляций с данными необходимо писать запросы на языке SQL (команды). Это сильно усложняет процесс программирования и снижает производительность приложений.
Более современный подход состоит в применении технологии LINQ to DataSet, которую разработал Anders Hejlsberg. Она впервые появилась в VS 2008. Аббревиатура LINQ означает Language-Integrated Query. Вот пример оператора LINQ.
var q = from c in db.Customers
from o in c.Orders
where c.City == "London"
select new { c.ContactName, o.OrderDate };
Использование LINQ to DataSet резко повышает производительность труда программиста, так как Visual Studio IDE обеспечивает мгновенную проверку синтаксиса, статическое определение типов и механизм подсказок (IntelliSense).
DataSet имеет довольно сложную структуру, позволяющую управлять множеством таблиц и связей между ними. Таблицы, в свою очередь управляют множеством строк, столбцов и ограничений. Следующий рисунок дает приближенное представление о структуре класса DataSet.
Свойства DataViewManager и ExtendedProperties дают доступ к коллекциям настроек. Они хранятся для каждой таблицы набора данных DataSet.
¨ Первая коллекция позволяет управлять такими свойствами, как режим сортировки строк таблицы, или фильтр отбора данных, передаваемых из DataSet в DataView. Класс DataView управляет образом таблиц. Например, он может отсортировать строки таблицы, отобрать измененные строки, добавленные, или удаленные.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.