Доступ к данным с помощью ADO.NET

Кэри Дженсен (Cary Jensen)

Технология ADO.NET обеспечивает собственный уровень доступа к данным в среде .NET. Эта статья является первой в серии, посвященной ADO.NET. В ней обсуждается механизм доступа к данным.

До недавнего времени процессор баз данных Borland Database Engine поддерживал практически все виды доступа к данным, реализованные в средствах быстрой разработки приложений (RAD) компании Borland. Начиная с Delphi 3, были добавлены дополнительные механизмы доступа к данным, включая технологии ClientDataSet и DataSnap (ранее известная, как MIDAS). Что касается Delphi 7, то этот продукт обладает встроенной поддержкой не менее 6 различных механизмов доступа к данным, не считая решений сторонних фирм. Среди них одним из самых современных является технология ADO.NET, поддержку которой компания Borland реализовала в своих последних средствах разработки для .NET, включающих C# Builder и компилятор Delphi для .NET.

Эта статья предоставляет обзор механизма доступа к данным по технологии ADO.NET так, как это определено в среде .NET 1.1 Framework. В следующей статье предлагаемой серии эта тема будет продолжена с детальным обсуждением классов хранения данных, включая класс DataSet.

Читая статьи из предлагаемой серии, следует иметь в виду следующее. Во-первых, представленные статьи и сопутствующий код основаны на компиляторе для Delphi 7, чья обновленная версия 3 доступна с весны 2003 года. На момент написания данной статьи компания Borland еще не обладала интегрированной средой разработки для Delphi в среде .NET. Следовательно, рассмотренные в качестве примеров проекты не были созданы с помощью средств визуальной разработки. Вместо этого все визуальные компоненты (в случае, когда проект к ним обращается) были созданы и сконфигурированы, используя только программный код.

Во вторых, разработчики компании Borland возможно еще не закончили реализацию ADO.NET с помощью специальных методов, описанных в предлагаемой серии. Вероятнее всего компания Borland предоставит нечто вроде интерфейса ClientDataSet для .NET, который значительно упростит использование данных в управляемых устройствах, точно так же, как класс ADODataSet из библиотеки VCL упрощает использование ADO-объектов. Однако, если Borland разработает .NET ClientDataSet при использовании подхода, подобного своим классам ADODataSet, тогда, скорее всего, появится возможность использования как интерфейса ClientDataSet, так и более низкоуровневых методов, описанных в данной серии.

ADO.NET: Хранение данных и доступ к ним

ADO.NET - это название звена данных, предоставляемого библиотекой Foundation Class Library (FCL) в среде .NET. Концептуально технология ADO.NET может быть разделена на две различные составляющие: механизм доступа к данным и система хранения данных.

Все основные классы, интерфейсы и типы, используемые в ADO.NET, определены в пространстве имен второго уровня System.Data. Классы, соответствующие системе хранения данных, являются самостоятельными классами, которые можно использовать в любом приложении ADO.NET. Такие классы включают в себя DataColumn, DataRelation, DataRow, DataSet и DataTable, из которых наиболее важным является класс DataSet.

В отличие от механизма хранения, который определен в терминах классов, механизм доступа к данным определен на языке интерфейсов. Эти интерфейсы реализованы специальными классами, связанными с конкретным механизмом доступа к данным. В среде .Net Framework версии 1.1 существует пять механизмов доступа к данным. Они связаны со следующими пространствами имен третьего уровня: System.Data.SqlClient, System.Data.OleDb, System.Data.Odbc, System.Data.SqlServerCE и System.Data.OracleClient.

Например, рассмотрим класс SqlDataAdapter из пространства имен System.Data.SqlClient. Этот класс, который иногда относят к разряду DataAdapter, используется для загрузки данных в класс DataSet. SqlDataAdapter, подобно всем другим классам из разряда DataAdapter, реализует интерфейс IDbDataAdapter. Другие реализующие IDbDataAdapter классы включают в себя OleDbDataAdapter, OdbcDataAdapter и OracleDataAdapter.

Следует отметить, что многие поставщики баз данных разработали или разрабатывают свои собственные специфические механизмы доступа к данным. Возможно, что один из механизмов доступа к данным среды .Net Framework 1.1 обеспечит доступ к таким базам данных, но в результате классы доступа к данным, предоставленные самими поставщиками, скорее всего, будут более оптимизированы под конкретный сервер.

Интерфейсы доступа к данным в ADO.NET

Ниже предлагается диаграмма, описывающая уровень доступа к данным в ADO.NET и его взаимоотношение с классом DataSet. Как можно видеть, классы реализации интерфейсов доступа к данным предназначены для согласованного взаимодействия при доступе к основной базе данных. При этом, класс, реализующий IdbDataAdapter, используется для доставки требуемых данных классу DataSet.

Такой реализованный в терминах интерфейсов доступ к данным в среде .NET имеет большое значение, поскольку он обеспечивает доступ к данным на уровне API, оставляя реализующим классам специфические детали. В среде .NET Framework 1.1 каждый из этих интерфейсов реализуется некоторым классом, который принадлежит одному из пространств имен, соответствующих конкретному механизму доступа к данным. Например, для доступа к данным с помощью сервера SQL можно использовать классы SqlConnection, SqlCommand, SqlDataReader и SqlDataAdapters. С другой стороны, при доступе к данным через провайдера OleDb следует, соответственно, использовать классы OleDbConnection, OleDbCommand, OleDbDataReader и OleDbDataAdapter.

Ниже описываются представленные на диаграмме общие интерфейсы доступа к данным. Специально для разработчиков, использующих RAD-среду от Borland , обсуждается сходство между этими интерфейсами и их VCL-эквивалентами.

IDbConnection

Классы, реализующие интерфейс IDbConnection, используются для установления соединения с источником данных. В большинстве случаев источником будет служить база данных, соответствующая конкретному серверу баз данных. Однако, благодаря поддержке соединений OleDB и ODBC, можно подсоединяться к любому источнику данных, для которого имеются провайдер OleDb и ODBC-драйвера. Например, к таким источникам относятся базы данных Paradox, dBase и MS Access.

Остальные классы, которые реализуют остальные перечисленные на диаграмме интерфейсы, основаны на соединении, поддерживаемом классом реализации интерфейса IDbConnection. Тем не менее, при использовании класса DataSet, который не заносит свои данные в основную БД (например, когда DataSet получает данные из XML-файла), нет необходимости использовать класс, реализующий интерфейс IDbConnection.

Каждый класс реализации IDbConnection обладает одним или более конструкторами, использующимися для установления соединения с источником данных. Этот интерфейс также обеспечивает контроль над транзакциями базы данных.

Интерфейс IDbConnection определяет свойства, которые подобны тем, что предоставляются компонентом SQLConnection ADO-методов dbExpress и ADOConnection или компонентом TSession процессора баз данных BDE.

IDbCommand

Реализующие интерфейс IDbCommand классы используются для обработки запросов к основной базе данных. Такие классы должны быть связаны с соответствующими классами реализации интерфейса IDbConnection.

В рамках интерфейса IDbCommand запросы могут содержать параметры. Если это так, то следует связать данные с индивидуальными параметрами, используя класс, реализующий интерфейс IDbDataParameter. Все параметры, связанные с классом реализации интерфейса IDbCommand, находятся в свойстве Parameters соответствующего класса реализации. Это свойство является примером класса, реализующего интерфейс IDataParameterCollection.

Классы реализации интерфейса IDbCommand сходны с компонентом ADOCommand библиотеки VCL.

IdataReader

Классы, реализующие интерфейс IDataReader, обеспечивают быстрый, однонаправленный курсор к конечному набору данных, возвращаемому по запросу IDbCommand. Такие классы используются для выполнения операций, не требующих кэширования данных. Например, к таким операциям относится ситуация, когда не нужно загружать данные в класс DataTable или при итеративном обращении к конечному набору данных и выполнении условных вычислений над каждой встречающейся записью. Классы реализации интерфейса IDataReader схожи с классом SQLDataSet метода dbExpress.

IDbDataAdapter

Классы, реализующие интерфейс IDbDataAdapter, применяются для чтения данных и последующей их загрузки в класс DataSet. Для доступа к данным такие классы должны указывать на соответствующий класс реализации IDbConnection. Помимо загрузки данных в DataSet интерфейс IDbDataAdapters определяет запросы, используемые для работы с основной базой данных по извлечению и занесению информации. Реализующие интерфейс IDbDataAdapter объекты имеют много схожих черт с классом DataSetProvider в Delphi.

Классы реализации интерфейса IDbDataAdapter требуют наличия, по крайней мере, одного SQL-оператора, а во многих случаях не менее четырех. Как минимум, такие классы требуют SQL-оператора SELECT для идентификации записи, предназначенной для загрузки. Если данные, к которым осуществляют доступ классы реализации IDbDataAdapter, могут быть изменены, внесены или удалены, то должны присутствовать соответствующие SQL-операторы, которые предписывают, как эти данные обновляются, вставляются или удаляются.

SQL-операторы, применяемые в интерфейсе IDbDataAdapter, связаны со свойствами SelelectCommand, InsertCommand, UpdateCommand и DeleteCommand средства реализации IDbDataAdapter. Эти команды являются примерами классов, реализующих интерфейс IDbCommand. Все классы реализации интерфейса IDbDataAdapter могут принимать SQL-оператор SELECT в качестве параметра, по крайней мере, одного из своих перегруженных конструкторов. Если один из этих конструкторов используется для создания экземпляра IDbDataAdapter, то нет необходимости явно присваивать класс реализации IDbCommand свойству SelectCommand.

Вместо явного присваивания SQL-операторов свойствам InsertCommand, UpdateCommand и DeleteCommand можно использовать подходящие классы компоновки команд для генерации соответствующих SQL-команд. Тому примерами служат классы SQLCommandBuilder и OleDbCommandBuilder.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=1998