Опубликован: 25.09.2008 | Доступ: свободный | Студентов: 3223 / 516 | Оценка: 4.32 / 3.98 | Длительность: 18:50:00
ISBN: 978-5-94774-991-5
Лекция 10:

Использование баз данных в приложениях ASP.NET

< Лекция 9 || Лекция 10: 12345678910

Организация взаимодействия с БД

Для того, чтобы приложение .NET могло осуществлять взаимодействие с источником данных, необходимо установить соединение с ним. Наиболее типичным сценарием работы Web-приложения является следующий:

  1. Устанавливается соединение, открывается подключение к базе данных.
  2. Выполняется один или несколько запросов, осуществляющих внесение изменений в наборы данных источника данных, а также выборку данных из БД.
  3. Осуществляется отключение от источника данных. При этом пользователь работает с отсоединенным набором данных, просматривая его, выполняя фильтрацию, внося изменения и т. д.
  4. При необходимости переноса изменений из отсоединенного набора данных в БД, а также при необходимости просмотра изменений, внесенных в БД другими пользователями, осуществляется подключение к источнику данных, выполняются необходимые действия, после чего производится отключение от БД.

Рассмотрим эти этапы более подробно.

Подключение к БД

Как уже говорилось выше, для подключения к источнику данных с использованием ADO.NET необходимо воспользоваться объектом Connection. Для рассмотрения примеров подключений к источникам данных прежде всего необходимо выбрать поставщика данных, с которым будет работать приложение. Затем необходимо подключить соответствующие пространства имен, содержащие определения объектов выбранного поставщика. В качестве примеров подключения к источникам данных будем рассматривать базы данных Access и SQL Server 2005 Express Edition. Такой выбор продиктован прежде всего тем, что Access очень хорошо подходит для построения небольших информационных систем, нетребователен к ресурсам компьютера, не требует установки специального программного обеспечения. SQL Server Express является свободно распространяемой СУБД, обладающей всеми достоинствами коммерческого SQL Server 2005 и имеющей ряд ограничений, в том числе на максимальный объем базы данных (не более 4 Гб). Все приемы работы с базами данных, описываемые ниже, могут быть использованы также для работы с коммерческими версиями продуктов Microsoft и другими СУБД.

Итак, для того, чтобы подключиться к базе данных во время выполнения программы, необходимо создать объект Connection, а также задать его свойства, определяющие текущие параметры подключения. Основным параметром, устанавливающим необходимые опции для подключения к БД, является строка соединения, которая представляет собой набор пар "имя-значение", разделенных точкой с запятой. Порядок следования значений этих параметров, а также их регистр не важны. Строка соединения зависит от СУБД, к которой осуществляется подключение, а также от используемого поставщика данных. Тем не менее существует несколько фрагментов информации, указываемой в строке подключения, которые необходимы практически всегда. Перечислим их и прокомментируем их назначение.

  1. Сервер, на котором находится база данных. Если СУБД, к которой осуществляется подключение, расположена на клиентском компьютере (так будет во всех примерах, рассматриваемых в рамках данного курса), то вместо имени сервера необходимо указывать имя localhost либо IP-адрес 127.0.0.1.
  2. Имя базы данных, к которой производится подключение.
  3. Способ аутентификации пользователя. Существующие клиент-серверные СУБД (к которым относится SQL Server, Oracle и ряд других) позволяют указывать в строке подключения имя пользователя и пароль, которые будут нужны для проверки возможности доступа к базе данных, либо использовать параметры текущего пользователя.

В качестве примера рассмотрим создание небольшого Web-приложения для работы с базой данных, ER-модель которой представлена на рис. 10.3.

ER-модель фрагмента базы данных

Рис. 10.3. ER-модель фрагмента базы данных

Создадим базы данных в соответствии с моделью, изображенной на рис. 10.3, в формате SQL Server Express и Access 2003. Для этого исполним следующие SQL-запросы:

CREATE DATABASE TEST_DB

CREATE TABLE Товары
(КодТовара INTEGER NOT NULL,
НаименованиеТовара VARCHAR (50) NOT NULL,
Цена FLOAT,
PRIMARY KEY (КодТовара))

CREATE TABLE Контрагенты
(КодКонтрагента INTEGER NOT NULL,
НаименованиеКонтрагента VARCHAR (50) NOT NULL,
PRIMARY KEY (КодКонтрагента))

CREATE TABLE Закупки
(КодОперации INTEGER NOT NULL,
 ДатаОперации DATETIME NOT NULL,
 Количество FLOAT,
 Цена FLOAT,
 КодКонтрагента INTEGER NOT NULL,
 КодТовара INTEGER NOT NULL,
 PRIMARY KEY (КодОперации),
 CONSTRAINT Входят_в
 FOREIGN KEY (КодТовара)
 REFERENCES Товары,
 CONSTRAINT Осуществляют
 FOREIGN KEY (КодКонтрагента)
 REFERENCES Контрагенты)
Диаграмма базы данных в SQL Server 2005 Express

Рис. 10.4. Диаграмма базы данных в SQL Server 2005 Express

Построение Web-приложений для работы с базами данных различных видов практически идентичны. Основное различие заключается в способе организации доступа к самой базе, т. е. в способе подключения к ней. Для подключения к БД используется объект Connection из пространства имен System.Data.SqlClient в случае с SQL Server и System.Data.OleDb - в случае с другими источниками данных, например, Access. Строки соединения с базами данных при этом будут выглядеть следующим образом:

string strSqlConnection = "Data Source=localhost\\
     sqlexpress;Initial
 Catalog=TEST_DB;Integrated Security=SSPI";
    string strOleDbConnection = "Provider=Microsoft.Jet.
     OLEDB.4.0;Data
Source=C:\\Projects\\Ex_Db\\App_Data\\TEST_DB.mdb";

Для открытия соединения с базой данных необходимо вызвать метод Open объекта Connection. При этом строку соединения с БД можно передать как в качестве параметра конструктора объекта, так и потом с помощью установки соответствующего свойства.

SqlConnection sqlCon=new SqlConnection(strSqlConnection);
sqlCon.Open();
OleDbConnection oleDbCon=new OleDbConnection();
oleDbCon.ConnectionString=strOleDbConnection;
oleDbCon.Open();

Строку соединения с базой данных можно жестко прописать в исходном коде приложения, однако это не самый лучший вариант, т. к. при изменении пути к базе данных либо других параметров соединения придется вносить изменения в исходный код приложения и перекомпилировать его. В связи с этим лучше всего использовать строку соединения, сохраненную в файле web.config.

<connectionStrings>
   <add name="TEST_DBConnectionString" connectionString="Provider=
 Microsoft.Jet.OLEDB.4.0;Data Source=C:\Projects\Ex_Db\App_Data\
TEST_DB.mdb"/>
</connectionStrings>

Впоследствии эту строку можно извлечь из файла web.config.

"string strOleDbConnection = WebConfigurationManager.
 ConnectionStrings
["TEST_DBConnectionString"].ConnectionString;

Управление соединением осуществляется очень легко. Методы Open и Close объекта Connection выполняют всю работу. Однако следует учитывать, что при подключении к базе данных может произойти сбой, в результате которого установить соединение с ней окажется невозможно. Это может быть особенно актуальным при размещении базы данных на другом сервере, который в момент подключения может оказаться недоступным. Для того чтобы неудавшаяся попытка соединения с базой данных не приводила к фатальным последствиям при работе приложения, необходимо использовать конструкции try catch, позволяющие адекватно реагировать на возникшую ошибку. Следующий пример демонстрирует возможность использования такого подхода.

try
{
  sqlCon.Open();
  lbl_DB.Text = "<b>Сервер:</b>"+sqlCon.ServerVersion;
  lbl_DB.Text += "</br><b>Соединение:</b>" +
  sqlCon.ToString();
}
catch(Exception ex)
{
  lbl_DB.Text = "При соединении с БД произошла ошибка ";
  lbl_DB.Text += ex.Message;
}
finally
{
  sqlCon.Close();
  lbl_DB.Text += "</br><b>Соединение:</b>";
  lbl_DB.Text += sqlCon.State.ToString();
}

Результатом работы этого фрагмента кода в случае успешного установления соединения будет сообщение, изображенное на рис. 10.5.

Окно сообщения о параметрах и состоянии текущего соединения с БД

Рис. 10.5. Окно сообщения о параметрах и состоянии текущего соединения с БД

На рис. 10.6 изображено окно, содержащее сообщение об ошибке установления соединения.

Окно сообщения об ошибке в момент подключения к БД

Рис. 10.6. Окно сообщения об ошибке в момент подключения к БД

Для обслуживания соединения с базой данных расходуются ресурсы компьютера, на котором выполняется Web-приложение. В связи с этим рекомендуется открывать соединение как можно позже, а закрывать как можно раньше, сразу после того, как все необходимые действия с объектами базы данных были выполнены. Кроме того, желательно строить программный код так, чтобы соединение с базой данных закрывалось при любом исходе соединения с ней. В предыдущем примере код, расположенный в блоке finally, выполнится при любом исходе попытки подключения, что гарантирует освобождение ресурсов сервера, не дожидаясь момента, когда память будет освобождена сборщиком мусора.

< Лекция 9 || Лекция 10: 12345678910