* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Архитектура данных ADO.NET
8 февраля 2009
Доступ к данным в ADO.NET основан на использовании двух компонентов: набора данных (он представлен объектом DataSet), в котором данные хранятся на локаль- ном компьютере, и провайдера данных (Data Provider), выполняющего функции по- средника при взаимодействии программы и БД.
Объект DataSet Объект DataSet — это представление в памяти компьютера данных, изолированных от источника данных. Этот объект можно также рассматривать как локальную ко- пию фрагмента БД. В DataSet данные можно загрузить из любого допустимого ис- точника, например из БД SQL Server, Microsoft Access или XML-файла. Объект DataSet хранится в памяти, его содержимым разрешено манипулировать и обнов- лять независимо от БД, играющей роль источника данных. При необходимости объект DataSet может служить шаблоном для обновления серверной БД. Объект DataSet содержит набор объектов DataTable (этот набор может быть и пустым, то есть не содержать ни одного объекта DataTable}. Каждый объект Data- Table представляет в памяти компьютера одну таблицу. Структура объекта Data Table определяется двумя наборами: DataColumns, куда входят все столбцы таблицы, ко- торую представляет объект DataTable, и набором ограничений таблицы. Вместе эти два набора составляют схему таблицы. В DataTable также входит набор Data Rows, где, собственно, и хранятся данные объекта DataSet. Кроме того, объект DataSet содержит набор Data Relations, который позволяет со- здавать связи между строками различных таблиц. DataRelations содержит набор объектов DataRelation, определяющих связи между таблицами, которые составляют DataSet. Рассмотрим, например, DataSet, содержащий две связанные между собой таблицы — Customers и Orders. В таблице Customers каждый покупатель представ- лен только одной строкой, идентифицируемой уникальным полем CustomerlD. В таблице Orders содержатся сведения о покупателях, разместивших заказы; заказчи- ки идентифицируются значением поля CustomerlD. Если некоторый покупатель разместит несколько заказов, то в таблице Orders может оказаться несколько шпи- сей с одинаковым значением CustomerlD. Подобная ситуация — пример связи типа «один ко многим», такую связь можно определить посредством объекта DataRelation. Наконец, DataSet содержит набор Extended Properties, в котором хранятся допол- нительные данные объекта DataSet. Провайдер данных Связь с БД создается и поддерживается при помощи провайдера данных {Data Provider). В действительности провайдер — это набор взаимосвязанных компонен- тов, обеспечивающих эффективный высокопроизводительный доступ к данным. В настоящее время с .NET Framework поставляются два провайдера данных: SQL Server .NET Data Provider, созданный для работы с SQL Server версии 7.0 и выше, и OleDb .NET Data Provider— для подключения к БД других типов. Любой провайдер данных состоит из близких версий следующих универсальных классов компонентов: • Connection — обеспечивает подключение к БД; • Command — применяется для управления источником данных; позволяет испол- нять команды, не возвращающие данных, например INSERT, UPDATE и DELETE, либо команды, возвращающие объект DataReader (такие, как SELECT); • DataReader — предоставляет доступный только для однонаправленного чтения набор записей, подключенный к источнику данных; • DataAdapter — заполняет отсоединенный объект DataSet или DataTable и обнов- ляет его содержимое. Примечание Если в тексте этой главы название класса компонента приводится без префикса, указывающего его версию, сказанное в равной мере относится к обоим версиям провайдеров данных. Например, Command означает как OleDbCommand,ia.K и SqlCommand. Доступ к данным в ADO.NET осуществляется так: объект Connection устанавли- вает между приложением и БД соединение, напрямую доступное объектам Command и DataAdapter. Объект Command позволяет исполнять команды непосредственно над БД. Если исполненная команда возвращает несколько значений, Command откры- вает к ним доступ через объект DataReader. Полученные результаты можно обраба- тывать напрямую, используя код приложения, либо через объект DataSet, заполнив его при помощи объекта DataAdapter. Для обновления БД также применяют объек- ты Command или DataAdapter. В следующих разделах приводятся общие сведения об универсальных классах компонентов провайдеров данных. Объект Connection Объект Connection представляет соединение с БД. Visual Studio .NET поддерживает два класса Connection: SqlConnection, предназначенный для подключения к SQL Server версии 7.0 и выше, и OleDbConnection., который применяется для подключе- ния к самым разным БД. Все данные, необходимые для открытия канала связи с БД, хранятся в свойстве ConnectionSiring объекта Connection, этот объект также под- держивает ряд методов, позволяющих обрабатывать данные с применением тран- закций. Объект Command Объект Command также представлен двумя классами — SglCommandu OleDbCommand. Он позволяет исполнять команды над БД, используя для обмена данными установленное соединение. При помощи объектов Command можно исполнять хра- нимые процедуры, команды SQL, а также операторы, возвращающие целые табли- цы. Объект Command поддерживает три метода: • ExecuteNonQuery. Исполняет команды, не возвращающие данные, например INSERT, UPDATE и DELETE; • Execute Scalar. Исполняет запросы к БД, возвращающие единственное значение; • Execute Reader. Возвращает результирующий набор через объект DataReader. Объект DataReader Объект DataReader предоставляет поток с набором записей БД, доступный только для однонаправленного чтения. Б отличие от других компонентов провайдера дан- ных, создавать экземпляры DataReader напрямую не разрешается, его можно полу- чить при помощи методов ExecuteReader объекта Command: метод SqlCommand.Ехеси- teReader возвращает объект SglData Reader, а метод OleDbCommand. ExecuteReader — объект OleDbDataReader. Если записывать содержимое объекта DataReader на диск не требуется, строки с данными можно передавать приложению напрямую По- скольку в любой момент времени в памяти находится только одна строка, исполь- зование объекта DataReader почти не снижает производительность системы, но тре- бует монопольного доступа к открытому объекту Connection в течение времени жиз- ни объекта DataReader. Объект DataAdapter DataAdapter — это основной класс ADO.NET, обеспечивающий доступ к отсоеди- ненным данным. В сущности, он выполняет функции посредника во взаимодей- ствии между БД и объектом DataSet. При вызове метода Fill объект DataAdapter за- полняет Data Table или DataSet данными, полученными из БД. После обработки дан- ных, загруженных в память, можно записать модифицированные записи в БД, вы- звав метод Update объекта DataAdapter. У DataAdapter имеются четыре свойства, 11ред- ставляюших команды БД: • Select Command. Содержит текст или объект команды, осуществляющей выборку данных из БД; при вызове метода Fill эта команда исполняется и заполняет объект DataTable или объект DataSet', • Insert Command. Содержит текст или объект команды, осуществляющий вставку строк в таблицу; • DeleteCommand. Содержит текст или объект команды, осуществляющий удале- ние строки из таблицы; • UpdateCommand. Содержит текст или объект команды, осуществляющий обнов- ление значений в БД. При вызове метода Update все измененные данные копируются из объекта Data- Set в БД с исполнением соответствующей команды InsertCommand, DeleteCommand или UpdateCommand.