Студопедия

КАТЕГОРИИ:


Архитектура-(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:

 

Тип объекта Базовый класс Реализован–ные интерфейсы Назначение
Connection SqlConnection DbConnection OracleConnection   IDbConnection Объект соединения. Позволяет подключаться к хранилищу данных и отключаться от него. Кроме того, объекты подключения обеспечивают доступ к соответствующим объектам транзакций.
Command DbCommand SqlCommand   IDbCommand Объект команды. Представляет SQL-запрос или хранимую процедуру. Кроме того, объекты команд предоставляют доступ к объекту чтения данных конкретного поставщика данных.
DataReader DbDataReader IDataReader, IDataRecorder Объект чтения данных. Предоставляет однонаправленный доступ к данным только для чтения на стороне сервера.
DataAdapter DbDataAdapter SqlDataAdapter, OracleDataAdapter IDataAdapter, IDbDataAdapter Объект адаптера данных. Пересылает наборы данных из хранилища данных к вызывающему процессу и обратно. Адаптеры данных содержат подключение и набор из четырех внутренних объектов команд для выборки, вставки, изменения и удаления информации в хранилище данных.
Parameter DbParameter SqlParametrs IDataParameter, IDbDataParameter Объект параметра. Представляет именованный параметр в параметризованном запросе.
Transaction DbTransaction SqlTransaction IDbTransaction Объект транзакции. Выполняет транзакцию базы данных.

Хотя имена соответствующих типов для разных поставщиков данных оказываются разными (например, 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.

 

<== предыдущая лекция | следующая лекция ==>
Лекция 3. 1. Социальная структура общества: понятие основные элементы, факторы формирования | Понятие и сущность источников МТП
Поделиться с друзьями:


Дата добавления: 2014-01-13; Просмотров: 3508; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.