Основы ADO.NET
Базы данных - это хранилища структурированных данных, с которыми удобно работать. СУБД - это программное приложение, извлекающее, отображающее в удобном виде и модифицирующее структурированные данные. Чаще всего применяются реляционные базы данных. Библиотека .NET Framework включает свою собственную технологию доступа к данным - ADO.NET. В нее включены классы, обеспечивающие соединение и обработку данных как в локальных, так и в Web-приложениях. Причем код приложения остается почти одинаковым.
Поставщики данных
Важное место в архитектуре ADO.NET занимают поставщики данных ( data provider ). Они являются универсальными посредниками между источником данных и приложением. В состав одного поставщика входят следующие классы ( используются обобщенные имена ):
- Connection - используется для установки соединения с источником данных
- Command - используется для выполнения команд SQL и хранимых процедур
- DataReader - предоставляет быстрый доступ только для чтения к извлеченным данным
- DataAdapter - этот класс решает две задачи:
ADO.NET содержит набор специализированных поставщиков для различных источников данных. Каждый поставщик данных имеет специфическую реализацию классов Connection, Command, DataReader, DataAdapter, оптимизированных для конкретных баз данных. Например, если нужно подключиться к базе данных SQL Server, то используется класс SqlConnection.
Библиотека .NET Framework содержит четыре типа готовых поставщиков данных
- Поставщик SQL Server
- Поставщик OLE DB
- Поставщик Oracle
- Поставщик ODBC
Для других типов данных разработчики могут либо создавать свои поставщики, либо приобретать их у сторонних организаций. Выбирая класс поставщика, нужно сначала попытаться найти родного поставщика для данного источника данных. Если это невозможно, то можно воспользоваться поставщиком OLE DB при условии, что существует драйвер OLE DB для этого источника данных.
Технология OLE DB существует уже много лет как часть ADO, поэтому большинство распространенных источников данных ( SQL Server, Oracle, Access, MySQL и т.д.) предусматривают драйверы OLE DB. Наконец, можно использовать поставщик ODBC в сочетании с драйвером ODBC, поскольку это самая старая технология доступа к данным, но производительность такого подключения может быть очень низкой.
Применение специализированных поставщиков может потребовать изменения кода приложения при переходе к другому типу базы данных. Но эти изменения будут незначительными, поскольку поставщики различаются только до уровня набора данных DataSet, а далее код обработки не зависит от типа источника данных. И то, если кодировать не для классов поставщиков, а для интерфейсов, то менять вообще будет нечего. Эту технологию, кодирование для интерфейсов, мы рассмотрим позже.
Классы ADO.NET группируются в нескольких пространствах имен:
- System.Data - содержит ключевые контейнерные классы, моделирующие сами данные. Дополнительно содержит ключевые интерфейсы, реализуемые объектами данных, основанными на соединениях
- System.Data.Common - содержит базовые классы, наследуемые классами поставщиков
- System.Data.OleDb - включают поставщиков для источников данных OLE DB
- System.Data.SqlClient - включают поставщиков для источников данных SQL Server
- System.Data.OracleClient - включают поставщиков для источников данных Oracle
- System.Data.SqlTypes - содержит структуры, соответствующие родным типам данных SQL Server. Эти классы не являются необходимыми, но в силу их специфичности оптимизируют доступ к данным SQL Server
- System.Data.Odbc - включают поставщиков для источников данных ODBC. Операционная система Windows имеет драйверы ODBC для всех видов источников данных, которые конфигурируются в панели управления Пуск/Настройка/Панель управления/Администрирование/Источники данных (ODBC)
Класс Connection
Этот класс устанавливает соединение с источником данных, к которому мы хотим подключиться, чтобы выполнить с данными какие-то действия. Свои основные свойства и методы класс Connection реализует от наследуемого интерфейса IDbConnection.
Строка соединения
При установке соединения требуется строка соединения, которая представляет собой список пар имя=значение, разделенных точкой с запятой. За исключением небольших различий, строка соединения содержит несколько атрибутов, необходимых почти всегда (порядок следования атрибутов значения не имеет):
- Сервер, на котором находится база данных. При выполнении упражнений мы будем обоснованно полагать, что наши приложения ASP.NET и сервер базы данных находятся на одном и том же компьютере, поэтому вместо имени компьютера будем использовать псевдоним localhost
- База данных, к которой надо подключиться. Мы будем использовать готовую учебную БД Northwind, которая инсталируется по умолчанию с установкой SQL Server 2005
- Атрибут аутентификации (login). Мы не будем использовать имя и пароль, а будем подключаться к БД как текущий пользователь системы
Ниже представлены примеры строки соединения для подключения к БД Northwind на текущем компьютере
Строку соединения можно указать в конструкторе при создании объекта Connection или в методе Connection.Open(). Строку соединения можно поместить не в код страницы, а в конфигурационный файл web.config
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="Northwind" connectionString="Data Source=localhost; Initial Catalog=Northwind; Integrated Security=SSPI" /> </connectionStrings> <system.web> </system.web> </configuration>
В любое время в коде страницы можно извлечь эту строку соединения по ID -имени из коллекции следующим образом
string connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;