Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


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

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

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

Событие

Описание

Disposed

Возникает при вызове метода Dispose экземпляра класса

InfoMessage

Возникает при получении информационного сообщения от поставщика данных

StateChange

Возникает при открытии или закрытии соединения. Поддерживается информация о текущем и исходном состояниях

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

Создадим новое Windows-приложение, работающее с базой данных BDTur_firmSQL.mdf.

На форме разместим объект dataGridView со свойством Dock=Top, кнопку btnFill с надписью «Заполнить» справа под ним, и две метки (объекты типа Label). Свойству AutoSize каждой метки назначим значение False, свойству Dock второй метки (label2) значение Top, а свойству Dock первой (label1) None, и поместим ее под второй меткой слева, увеличив ее размеры (рис. 61).

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

using System.Data.SqlClient;

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

string connectionString = @"Data Source=.\SQLEXPRESS; AttachDbFilename=" +
             @"D:\ВМИ\For ADO\BDTur_firmSQL.mdf" + "integrated Security=True;
Connect Timeout=30";
string commandText = "SELECT * FROM Туристы";

Объекты ADO будем создавать в обработчике события Click кнопки «Заполнить»:

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);
         dataGridl.DataSource = ds.Tables[0].DefaultView;
//Метод Dispose, включающий в себя метод Close,
//разрывает соединение и освобождает ресурсы.
         conn.Dispose();
}

Для создания методов-обработчиков дважды нажимаем клавишу TAB при вводе соответствующей строки как на рис. 60.

В методе conn_Disposed просто будем выводить текстовое сообщение в надпись label2:

private void conn_Disposed(object sender, EventArgs e) {
         label2.Text+="Cобытие Dispose";
}

При необходимости в этом методе могут быть определены соответствующие события.

В методе conn_StateChange будем получать информацию о текущем и исходном состояниях соединения:

private void conn_StateChange(object sender, StateChangeEventArgs e) {
         label1.Text+="\nИсходное состояние: "+e.OriginalState.ToString() + "\nТекущее состояние: "+ e.CurrentState.ToString();
}

Запускаем приложение. До открытия соединения состояние объекта conn было закрытым (Closed). В момент открытия текущим состоянием становится Open, а предыдущим - Closed. Этому соответствуют первые две строки, выведенные в надпись (рис. 61). После закрытия соединения (вызова метода Dispose) текущим состоянием становится закрытое (Closed), а предыдущим - открытое (Open). Этому соответствуют последние две строки, выводимые в надпись.

Рис. 60. Автоматическое создание методов-обработчиков при помощи Intelligence

Рис. 61. Изменения состояния соединения с базой данных

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

 



<< ПредыдущаяОглавлениеСледующая >>