Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Управление соединением. Объект Connection

Большинство источников данных поддерживает ограниченное количество соединений. Так, например, база данных MS Access может поддерживать одновременную работу не более чем с 255 пользователями. При попытке обращения к базе данных, лимит соединений которой исчерпан, пользователь не получит нужной ему информации и будет вынужден ждать освобождения соединения. Задача разработчика заключается в минимизации времени связи с базой данных, поскольку соединение занимает полезные системные ресурсы.

Когда вызывается метод объекта DataAdapter (например, метод Fill), то он сам проверяет, открыто ли соединение. Если соединения нет, то DataAdapter открывает соединение, выполняет задачи и затем закрывает соединение.

Явное управление соединением обладает рядом преимуществ:

- дает более чистый и удобный для чтения код;

- помогает при отладке приложения;

- является более эффективным.

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

using System.Data.OleDb;

В конструкторе Forml после InitializeComponent создим объект Connection:

OleDbConnection conn = new OleDbConnection(ConnectionString);

В качестве параметра объекту conn передается строка подключения ConnectionString.

Можно также устанавливать строку подключения через свойство созданного объекта conn:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;

В качестве строки соединения можно использовать одну из строк из примеров для приложения, разработанного выше (см. п. 3.4). Например,

string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=D:\ВМИ\For ADO\BDTur_firm.mdb";

Теперь можно устанавливать соединение, вызывая метод Open объекта Connection:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
conn.Open();

 

Класс 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. Изменения состояния соединения с базой данных

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




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 641; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.