Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 11:

Основы ADO.NET

Аннотация: Поставщики данных. Класс Connection. Строка соединения. Подключение к БД и тестирование соединения. Организация пула соединений. Классы Command и DataReader. Метод SqlCommand.ExecuteReader().Обработка одного результирующего набора данных SqlDataReader. Обработка множественного результирующего набора данных SqlDataReader. Метод SqlCommand.ExecuteScalar().Метод SqlCommand.ExecuteNonQuery().Атаки на базу данных внедрением SQL. Вызов хранимых процедур. Транзакции. Точки сохранения для отката транзакции. Фабрики поставщиков.
Ключевые слова: базы данных, приложение, реляционная база данных, Web, место, поставщик данных, источник данных, Command, хранимая процедура, извлечение данных, DataSet, класс, sqlconnection, драйвер, производительность, кодирование, контейнерный класс, commonality, базовый класс, ODBC, метод класса, строка соединения, сервер баз данных, псевдоним, БД, интегрированность, Data Source, initializer, catalog, integrator, SA, system administrator, OLE DB, MDB, конфигурационный файл, labels, двойной щелчок, finally, CONS, disposal, pooling, timeout, MIN, статические методы, домен приложения, SQL-запрос, конструктор класса, SQL, stored procedures, имя таблицы, свойство класса, объект, выборка данных, SUM, запрос SQL, размерность, FieldCount, целый тип, тип дата/время, ANN, сложение строк, визуализация, поток информации, GridView, region, phone, fax, ST, delighting, ORDER, administrator, out-of-the-box, HTM, e-marketing, del, export, скалярная величина, агрегатные функции, значение, преобразование типов, insertion, запись, поле ввода, строка запроса, Button, этапы проектирования, total, злоумышленник, операторы SQL, поле, информация, пользователь, остаток, атака, custom, специальный символ, удаление таблиц, параметризованная команда, спецификатор, PARAMETER, защита данных, входной параметр, выходные параметры, создание хранимой процедуры, обработка исключений, транзакция, transaction, COMMIT, исключение, Rollback, гиперссылка, операторные скобки, откат, отмена транзакции, программный способ

Файлы к лекции Вы можете скачать здесь

Базы данных - это хранилища структурированных данных, с которыми удобно работать. СУБД - это программное приложение, извлекающее, отображающее в удобном виде и модифицирующее структурированные данные. Чаще всего применяются реляционные базы данных. Библиотека .NET Framework включает свою собственную технологию доступа к данным - ADO.NET. В нее включены классы, обеспечивающие соединение и обработку данных как в локальных, так и в Web-приложениях. Причем код приложения остается почти одинаковым.

Поставщики данных

Важное место в архитектуре ADO.NET занимают поставщики данных ( data provider ). Они являются универсальными посредниками между источником данных и приложением. В состав одного поставщика входят следующие классы ( используются обобщенные имена ):

  1. Connection - используется для установки соединения с источником данных
  2. Command - используется для выполнения команд SQL и хранимых процедур
  3. DataReader - предоставляет быстрый доступ только для чтения к извлеченным данным
  4. DataAdapter - этот класс решает две задачи:
    • наполнение DataSet ( набор данных ) информацией, извлеченной из источника данных
    • сохраняет изменения, выполненные в DataSet

ADO.NET содержит набор специализированных поставщиков для различных источников данных. Каждый поставщик данных имеет специфическую реализацию классов Connection, Command, DataReader, DataAdapter, оптимизированных для конкретных баз данных. Например, если нужно подключиться к базе данных SQL Server, то используется класс SqlConnection.

Библиотека .NET Framework содержит четыре типа готовых поставщиков данных

  1. Поставщик SQL Server
  2. Поставщик OLE DB
  3. Поставщик Oracle
  4. Поставщик ODBC

Для других типов данных разработчики могут либо создавать свои поставщики, либо приобретать их у сторонних организаций. Выбирая класс поставщика, нужно сначала попытаться найти родного поставщика для данного источника данных. Если это невозможно, то можно воспользоваться поставщиком OLE DB при условии, что существует драйвер OLE DB для этого источника данных.

Технология OLE DB существует уже много лет как часть ADO, поэтому большинство распространенных источников данных ( SQL Server, Oracle, Access, MySQL и т.д.) предусматривают драйверы OLE DB. Наконец, можно использовать поставщик ODBC в сочетании с драйвером ODBC, поскольку это самая старая технология доступа к данным, но производительность такого подключения может быть очень низкой.

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


Классы ADO.NET группируются в нескольких пространствах имен:

  1. System.Data - содержит ключевые контейнерные классы, моделирующие сами данные. Дополнительно содержит ключевые интерфейсы, реализуемые объектами данных, основанными на соединениях
  2. System.Data.Common - содержит базовые классы, наследуемые классами поставщиков
  3. System.Data.OleDb - включают поставщиков для источников данных OLE DB
  4. System.Data.SqlClient - включают поставщиков для источников данных SQL Server
  5. System.Data.OracleClient - включают поставщиков для источников данных Oracle
  6. System.Data.SqlTypes - содержит структуры, соответствующие родным типам данных SQL Server. Эти классы не являются необходимыми, но в силу их специфичности оптимизируют доступ к данным SQL Server
  7. System.Data.Odbc - включают поставщиков для источников данных ODBC. Операционная система Windows имеет драйверы ODBC для всех видов источников данных, которые конфигурируются в панели управления Пуск/Настройка/Панель управления/Администрирование/Источники данных (ODBC)

Класс Connection

Этот класс устанавливает соединение с источником данных, к которому мы хотим подключиться, чтобы выполнить с данными какие-то действия. Свои основные свойства и методы класс Connection реализует от наследуемого интерфейса IDbConnection.

Строка соединения

При установке соединения требуется строка соединения, которая представляет собой список пар имя=значение, разделенных точкой с запятой. За исключением небольших различий, строка соединения содержит несколько атрибутов, необходимых почти всегда (порядок следования атрибутов значения не имеет):

  1. Сервер, на котором находится база данных. При выполнении упражнений мы будем обоснованно полагать, что наши приложения ASP.NET и сервер базы данных находятся на одном и том же компьютере, поэтому вместо имени компьютера будем использовать псевдоним localhost
  2. База данных, к которой надо подключиться. Мы будем использовать готовую учебную БД Northwind, которая инсталируется по умолчанию с установкой SQL Server 2005
  3. Атрибут аутентификации (login). Мы не будем использовать имя и пароль, а будем подключаться к БД как текущий пользователь системы

Ниже представлены примеры строки соединения для подключения к БД Northwind на текущем компьютере

Примеры строки соединения
Источник данных Строка соединения
SQL Server с использованием интегрированной безопасности string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI";
SQL Server с использованием учетной записи ( id=sa - system administrator ) string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "user id=sa;password=xxx";
Используется поставщик OLE DB для подключения к БД Sales типа Oracle через драйвер MSDAORA OLE DB с правами администратора и пустым паролем string connectionString = "Data Source=localhost;Initial Catalog=Sales;" + "user id=sa;password=;Provider=MSDAORA";
Подключение к БД Access. Символ "@" требует от компилятора интерпретировать строку буквально string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=C:\DataSources\Northwind.mdb";

Строку соединения можно указать в конструкторе при создании объекта 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;