КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Три стороны технологии ADO.NET
Библиотеки ADO.NET (.NET версии 3.5 и выше) можно применять тремя концептуально различными способами: в подключенном (связном) режиме, в автономном режиме и с помощью технологии Entity Framework. В.NET версии 2.0 используются лишь два первых способа взаимодействия.
При использовании подключенного уровня (connected layer), кодовая база явно подключается к соответствующему хранилищу данных и отключается от него. При таком способе использования ADO.NET обычно происходит взаимодействие с хранилищем данных с помощью объектов подключения, объектов команд и объектов чтения данных. Автономный уровень (disconnected layer), позволяет работать с набором объектов DataTable (содержащихся в объекте DataSet), который представляет на стороне клиента копию внешних данных. При получении DataSet с помощью соответствующего объекта адаптера данных подключение открывается и закрывается автоматически. Понятно, что этот подход помогает быстро освобождать подключения для других вызовов и повышает масштабируемость систем. Получив объект DataSet, вызывающий код может просматривать и обрабатывать данные без затрат на сетевой трафик. А если нужно занести изменения в хранилище данных, то адаптер данных задействуется для обновления данных, при этом подключение открывается заново для проведения обновлений в базе, а затем сразу же закрывается. После выпуска.NET 3.5 SP1 в ADO.NET появилась поддержка новой технологии (новой функции API), которая называется Entity Framework (сокращенно EF). Технология EF показывает, что многие низкоуровневые детали работы с базами данных скрыты от программиста и отрабатываются за него при генерации соответствующего LINQ-запроса. Технологию LINQ рассмотрим в конце изучения темы. 2.3 Пространство имен System.Data. С точки зрения программиста, тело ADO.NET составляет базовая сборка с именем System.Data.dll. В этом двоичном файле находится значительное количество типов, совместно используемых всеми поставщиками данных ADO.NET, независимо от лежащего в их основе типа хранилища данных. Прикладные программы, позволяющие пользователям совместно использовать данные, могут использовать ADO.NET для подключения к источникам данных, а также для поиска, управления, и модификации этих данных. Итак, ADO.NET – это часть Microsoft.NET Framework, т.е. набор средств и слоев, позволяющих приложению легко управлять и взаимодействовать со своим файловым или серверным хранилищем данных:
3.1 Поставщики данных ADO.NET. ADO.NET не предлагает единого набора типов для связи со всеми СУБД. Вместо этого в ADO.NET имеются различные поставщики данных (провайдеры данных – data provider), каждый из которых оптимизирован для взаимодействия с конкретной СУБД. Первая выгода этого подхода состоит в том, что можно запрограммировать особый поставщик данных для доступа к любым уникальным особенностям конкретной СУБД. Еще одна выгода — конкретный поставщик данных может напрямую подключиться к механизму соответствующей СУБД, не пользуясь междууровневым слоем отображения. При первом приближении поставщик данных можно рассматривать как набор типов, определенных в данном пространстве имен, который предназначен для взаимодействия с конкретным источником данных. Однако независимо от используемого поставщика данных, каждый из них определяет набор классов, обеспечивающих основную функциональность. По сути, поставщик данных — это мост между приложением и источником данных. Одной из ключевых идей, лежащих в основе модели поставщиков ADO.NET, является расширяемость. Другими словами, разработчики могут создавать собственные поставщики для патентованных источников данных. В действительности доступно множество подтверждающих это примеров, которые демонстрируют, как создавать настраиваемые поставщики ADO.NET, служащие оболочками для не реляционных хранилищ данных, таких как файловая система или служба каталогов. Некоторые независимые производители также продают собственные поставщики данных для ADO.NET. В рамках.NET Framework поставляется набор поставщиков данных, например, поставщик в стиле Oracle, Microsoft SQL Server и OLE DB/ODBC (рис. 1):
Рисунок 1. – Уровни модели поставщиков данных Поставщик SQL Server.NET Data Provider предоставляет оптимизированный доступ к базе данных Microsoft SQL Server (версии 7.0 и выше) и взаимодействует с ней напрямую по «родному» протоколу передачи данных SQL Server. Он расположен в пространстве имен System.Data.SqlClient. Поставщик OLE DB предоставляет доступ к любому источнику данных, который имеет драйвер OLE DB. Это включает базы данных SQL Server версий, предшествующих 7.0. Он расположен в пространстве имен System.Data.OleDb. Поставщик Oracle предоставляет оптимизированный доступ к базам данных Oracle (версии 8 и выше). Примечание. Если ваше приложение работает с СУБД Microsoft Access, то следует подключить следующие директивы использования пространства имен: using System.Data; using System.Data.OleDb; Если ваше приложение работает с СУБД Microsoft SQL Server, то следует подключить следующие директивы использования пространства имен: using System.Data; using System.Data.SqlClient; При выборе поставщика сначала необходимо пытаться найти встроенный поставщик ADO.NET, который предназначен для имеющегося источника данных. Если таковой не найден, можно воспользоваться OLE DB при наличии драйвера OLE DB для источника данных. Любой используемый поставщик данных определяет набор типов, обеспечивающих базовые функциональные возможности. Базовые объекты поставщика данных ADO.NET, их базовые классы определены в пространстве имен System.Data.Common:
Хотя имена соответствующих типов для разных поставщиков данных оказываются разными (например, DbDataAdapter, SqlDataAdapter, OracleDataAdapter), каждый из таких объектов получается из одного и того же базового класса, что предполагает идентичность работы с ними.
3.2 Поведение объектов подключения. Необходимость подключения к источнику данных очень важна для любой архитектуры доступа к данным. ADO.NET позволяет организовать подключение к источнику данных с помощью подходящего объекта подключения, который входит в состав соответствующего поставщика данных. Чтобы открыть подключение, следует указать, какая информация необходима – например, имя сервера, идентификатор пользователя, пароль и т.д. Поскольку каждому целевому источнику подключения может понадобиться особый набор информации, позволяющий ADO.NET подключиться к источнику данных, выбран гибкий механизм указания всех параметров через строку подключения. Строка подключения содержит элементы с минимальной информацией, необходимой для установления подключений, в виде последовательности пар ключей-значений. Различные пары ключей-значений в строке подключений могу определять некоторые конфигурируемые параметры, определяющие поведение подключения. Сам объект подключения источника данных наследуется от класса SqlConnection и получает уже готовую логику, реализованную в базовых классах. Приложение должно разделять дорогостоящий ресурс – открытое подключение, и совместно использовать его с другим пользователем. Именно для этих целей и был введен пул подключений. По умолчанию пул подключений включен. При запросе ADO.NET неявно проверяет, имеется ли доступное неиспользуемое физическое подключение к базе данных. Если такое подключение имеется, то она использует его. Для принятия решения имеется ли такое физическое подключение или нет, ADO. NET учитывает загрузку приложения, и если поступает слишком много одновременных запросов, ADO. NET может удерживать одновременно открытыми несколько физических подключений, то есть увеличивать при необходимости количество подключений. Если детально рассмотреть картину, то ситуация такова: Под классом SqlConnection имеется брокер, управляющий пулом открытых подключений. Он отвечает за увеличение или уменьшение реального количества открытых подключений в зависимости от потребностей приложения. Для класса брокера каждое запрошенное подключение уникально идентифицируется соответствующей строкой подключения. Поэтому, когда любое приложение запрашивает открытое подключение к одной и той же базе данных, оно в начале просматривает внутренний кеш пула подключений, и если в нем есть доступное подключение, то используется оно. При отсутствии допустимого подключения создается новое, которое и передается приложению.
4. Объектная модель ADO.NET. Одни лишь подключенные приложения не удовлетворяют всем требованиям, предъявляемым к современным распределенным приложениям. В автономных приложениях, созданных с помощью ADO.NET, используют иной подход. Для обеспечения автономности используются объекты DataAdapter. Они осуществляют выполнение запросов, используя для этого объекты подключения. А результаты выполнения, то есть данные, передаются автономным объектам. Благодаря такому принципу автономные объекты не знают о существовании объектов подключения, так как напрямую не работают с ними. Таким образом, реализация объекта, хранящего данные, не зависит от конкретного поставщика данных, а именно от СУБД. Поскольку конкретная реализация адаптера данных зависит от соответствующего источника данных, конкретные адаптеры данных реализованы в составе конкретных поставщиков. Автономные приложения обычно подключаются к базе как можно позже и отключаются как можно раньше. Важным элементом в такой схеме подключения и предоставления автономного доступа к данным является контейнер для табличных данных, который не знает о СУБД. Такой незнающий о СУБД автономный контейнер для табличных данных представлен в библиотеках ADO.NET классом DataSet или DataTable. Объектная модель ADO.NET представлена на рисунке: Объектная модель ADO.NET предполагает существование (при написании приложения для работы с базой данных — использование) двух множеств классов, выполняющих четко определенные задачи при работе с базой данных (рис. 2).
Рисунок 2. – Классы ADO.NET Классы подсоединенных объектов обеспечивают установление соединения с базой данных и управление базой со стороны приложения. Классы отсоединенных объектов обеспечивают сохранение, использование и преобразование полученной от базы данных информации на стороне приложения. Таким образом, архитектуру ADO.NET можно разделить на две фундаментальные части: подключаемую и автономную. Все классы в ADO.NET можно поделить по этому критерию. Единственное исключение – класс DataAdapter, который является посредником между подключенной и автономной частями ADO.NET. Краткий обзор объектов ADO.NET: Источник данных DataSet. Это специализированный объект-образ базы данных, представляющий собой локальные копии любого количества взаимосвязанных таблиц данных. Класс DataSet является ядром автономного режима доступа к данным в ADO.NET. Лучше всего рассматривать его с позиции, как будто в нем есть своя маленькая СУБД, полностью находящаяся в памяти. DataSet состоит из объектов типа DataTable и объектов DataRelation. В коде к ним можно обращаться как к свойствам объекта DataSet. Свойство Tables возвращает объект типа DataTableCollection, который содержит все объекты DataTable используемой базы данных. Таблицы и поля (объекты DataTable и DataColumn). Объекты DataTable используются для представления одной из таблиц базы данных в DataSet. В свою очередь, DataTable составляется из объектов DataColumn. DataColumn – это блок для создания схемы DataTable. Каждый объект DataColumn имеет свойство DataType, которое определяет тип данных, содержащихся в каждом объекте DataColumn. Например, тип данных может быть целым числом, строковым данным, логическим данным и т.д. Поскольку данные, содержащиеся в DataTable, обычно переносятся обратно в исходный источник данных, необходимо согласовывать тип данных с источником. Строки (объект DataRow). Коллекция Rows объекта DataTable возвращает набор строк (записей) заданной таблицы. Эта коллекция используется для изучения результатов запроса к базе данных. Мы можем обращаться к записям таблицы как к элементам простого массива. Объект DataRelation. Этот класс позволяет задавать отношения между различными таблицами, с помощью которых можно проверять соответствие данных из различных таблиц. Объект DataSet имеет свойство Relations, возвращающее коллекцию DataRelationCollection, которая в свою очередь состоит из объектов DataRelation. Каждый объект DataRelation выражает отношение между двумя таблицами (сами таблицы связаны по какому-либо полю (столбцу)). Следовательно, эта связь осуществляется через объект DataColumn. Объект DataAdapter. Для осуществления взаимодействия между DataSet и собственно источником данных используется объект типа DataAdapter. Само название этого объекта – адаптер, преобразователь, – указывает на его природу. DataAdapter содержит методы Update() и Fill() для обновления данных из базы и заполнения объекта DataSet.Можно использовать четыре команды объекта, чтобы получить любые обновления: UpdateCommand, InsertCommand, DeleteCommand и SelectCommand. На следующем рисунке показано использование объекта SQLDataAdapter для передачи данных между базой данных SQL Server и объектом DataSet:
DataView. Это объект представлений базы данных, который обеспечивает пользовательское представление для DataTable с использованием сортировки, фильтрации, поиска, редактирования и навигации. Это отличает объект от метода Select из DataTable, который возвращает массив DataRow из таблицы, и содержание которого отражает изменения в базовой таблице, но, состав и упорядочение остаются неизменными. Динамические возможности DataView делают его идеальным для привязки данных в приложениях. 5. Интерфейсы соединения, транзакции, команды адаптеров данных, чтения данных. Базовые интерфейсы пространства имен System.Data определяют общие фукциональные возможности, предлагаемые всеми поставщиками данных. В пространстве имен System.Data.Common определено множество абстрактных типов, которые обеспечивают общий интерфейс для всех управляемых провайдеров. Все управляемые провайдеры реализуют интерфейс IDbConnection, который используется для конфигурирования и открытия сеанса подключения к источнику данных. Типы, которые реализуют другой интерфейс — IDbCommand, используются для выполнения SQL-запросов к базам данных. Интерфейс IDataReader обеспечивает считывание данных при помощи однонаправленного курсора только для чтения. Типы, которые реализуют IDbOataAdapter, ответственны за заполнение объекта DataSet данными из базы данных. Итак, интерфейс IDbConnection реализуется объектом соединения поставщика данных. Этот интерфейс определяет множество членов, используемых для настройки соединения с конкретным хранилищем данных (например, свойство для строки соединения string ConnectionSrting), а также позволяет получить объект транзакции поставщика данных. Перегруженные методы IdbTransaction BeginTransaction() и IdbTransaction BeginTransaction(Isolation Level il), определенные в интерфейсе IDbConnection, обеспечивают доступ к объеку транзакции поставщика данных. Объект соединения Connection. Объекты подключения используются для связи с базами данных. Они обладают свойствами, такими как DataSource, UserID, и Password, которые необходимы для доступа к DataSource. Команды перемещаются по соединению, и множества результатов возвращаются в виде потоков, которые могут быть прочитаны DataReaders или помещены в объекты DataSet. Есть два вида соединения объектов в ADO.NET: SqlConnection и OleDbConnection. Объекты Command. Командные объекты содержат информацию, которая передается в базу данных. Команда может быть сохранена как вызов процедуры, оператор обновления или утверждения, который возвращает результаты. Можно также использовать входные и выходные параметры и возвращаемые значения. В ADO.NET можно использовать два вида командных объектов: SqlCommand и OleDbCommand. Объекты DataReader. DataReader – это в своем роде синоним представления только читаемых/только передаваемых данных. Программный интерфейс DataReader поддерживает иерархические данные. Объект DataReader возвращается после выполнения команды в базе данных. Например, можно использовать DataReader для просмотра списка результатов поиска на веб-странице. ADO.NET включает два типа объектов DataReader: SqlDataReader для данных Microsoft SQL Server версии 7.0 (или более поздней версии), и OleDbDataReader для данных ADO. Объект DataReader является отдельной базой данных. Поведение SqlDataReader может отличаться от поведения OleDbDataReader. Для передачи данных в DataReader используются объекты OleDbCommand или SqlCommand и метод ExecuteReader.
Дата добавления: 2014-01-13; Просмотров: 3508; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |