Технология Microsoft ADO.NET

       

События объекта Connection


Класс Connection поддерживает несколько событий, позволяющих отслеживать статус соединения и получать уведомляющие сообщения для экземпляра этого класса. Описание событий приводится в таблице 4.1.

Таблица 4.1. События объекта Connection

Событие Описание
Disposed Возникает при вызове метода Dispose экземпляра класса
InfoMessage Возникает при получении информационного сообщения от поставщика данных
StateChange Возникает при открытии или закрытии соединения. Поддерживается информация о текущем и исходном состояниях

При вызове метода Dispose объекта Connection происходит освобождение занимаемых ресурсов и сборка мусора. При этом неявно вызывается метод Close.

Рассмотрим применение события StateChange и обработчик события Disposed. Создайте новое Windows-приложение и назовите его "ConnectionEventsSQL". Свойству Size формы устанавливаем значение "600;300". Помещаем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Добавляем элемент Panel, его свойству Dock устанавливаем значение "Bottom". На панели размещаем две надписи и одну кнопку, устанавливая следующие их свойства:

label1, свойство Значение
Location 8; 8
Size 208; 80
Text
labe2, свойство Значение
Location 232; 8
Size 208; 80
Text
button1, свойство Значение
Name btnFill
Location 488; 40
Text Заполнить

Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем строки connectionString и commandText:

string connectionString = "workstation id=9E0D682EA8AE448; packet size=4096;integrated security=SSPI;data source=\"(local)\"; persist security info=False;initial catalog=Northwind"; string commandText = "SELECT * FROM Customers";

Объекты ADO .NET будем создавать в обработчике события Click кнопки "btnFill":

private void btnFill_Click(object sender, System.EventArgs e) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = connectionString; //Делегат EventHandler связывает метод-обработчик conn_Disposed //с событием Disposed объекта conn conn.Disposed+=new EventHandler(conn_Disposed); //Делегат StateChangeEventHandler связывает метод-обработчик //conn_StateChange с событием StateChange объекта conn conn.StateChange+= new StateChangeEventHandler(conn_StateChange); SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conn); DataSet ds = new DataSet(); dataAdapter.Fill(ds); dataGrid1.DataSource = ds.Tables[0].DefaultView; //Метод Dispose, включающий в себя метод Close, //разрывает соединение и освобождает ресурсы.
conn.Dispose(); }
Не забывайте про возможности IntelliSense - как всегда, для создания методов-обработчиков дважды нажимаем клавишу TAB (рис. 4.8):


Рис. 4.8.  Автоматическое создание методов-обработчиков
В методе conn_Disposed просто выводим текстовое сообщение в надпись "label2":
private void conn_Disposed(object sender, EventArgs e) { label2.Text+="Событие Dispose"; }
При необходимости в этом методе могут быть определены соответствующие события. В методе conn_StateChange будем получать информацию о текущем и исходном состояниях:
private void conn_StateChange(object sender, StateChangeEventArgs e) { label1.Text+="\nИсходное состояние: "+e.OriginalState.ToString() + "\nТекущее состояние: "+ e.CurrentState.ToString(); }
Запускаем приложение. До открытия соединения состояние объекта conn было закрытым. В момент открытия текущим состоянием становится открытое, а предыдущим - закрытое. Этому соответствуют первые две строки, выведенные в надпись (рис. 4.9):

Рис. 4.9.  Готовое приложение ConnectionEventsSQL
После закрытия соединения (вызова метода Dispose) текущим состоянием становится закрытое, а предыдущим - открытое. Этому соответствуют последние две строки, выводимые в надпись.
Конечно, в таком предельно простом приложении и так ясен статус соединения. Но сама идея может применяться в любых, сколь угодно сложных приложениях, когда необходимо определять статус одного из нескольких подключений.
В программном обеспечении к курсу вы найдете приложение Connection EventsSQL (Code\Glava2\ ConnectionEventsSQL).
Создадим теперь аналогичное приложение, использующее базу данных Microsoft Access. Для того чтобы не терять время на создание пользовательского интерфейса, скопируйте папку приложения Connection EventsSQL и назовите ее "ConnectionEventsMDB". Перейдем к редактированию кода. Подключаем пространство имен для работы с базой данных:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:


string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" "; Data Source=""E:\Program Files\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples\Database\xtreme.mdb"";User ID=Admin;Jet OLEDB:Encrypt Database=False"; string commandText = "SELECT * FROM Customer";
Здесь мы снова будем подключаться к базе данных xtreme.mdb. Обработчик события Click кнопки "btnFill" примет следующий вид:
private void btnFill_Click(object sender, System.EventArgs e) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connectionString; //Делегат EventHandler связывает метод-обработчик conn_Disposed //с событием Disposed объекта conn conn.Disposed+=new EventHandler(conn_Disposed); //Делегат StateChangeEventHandler связывает метод-обработчик //conn_StateChange с событием StateChange объекта conn conn.StateChange+= new StateChangeEventHandler(conn_StateChange); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn); DataSet ds = new DataSet(); dataAdapter.Fill(ds); dataGrid1.DataSource = ds.Tables[0].DefaultView; //Метод Dispose, включающий в себя метод Close, //разрывает соединение и освобождает ресурсы. conn.Dispose(); }
Обработчики conn_Disposed и conn_StateChange будут иметь в точности такой же вид. Запускаем приложение - на форму снова выводится статус соединения (рис. 4.10):

Рис. 4.10.  Готовое приложение ConnectionEventsMDB
В программном обеспечении к курсу вы найдете приложение Connection EventsMDB (Code\Glava2\ ConnectionEventsMDB).

Содержание раздела