Просмотр данных средствами ADO.NET с привязкой на этапе выполнения
Файлы к лабораторной работе Вы можете скачать здесь.
В данной работе мы рассмотрим различные способы извлечения данных для просмотра из базы данных Northwind. При этом все соединения с базой данных и заполнения данными элементов просмотра будут осуществляться во время выполнения. Это не означает, что соединение с базой данных будет открыто на всем протяжении работы с формой.
Соединение открывается лишь на то время, когда происходит заполнение таблицы данными. После этого незаметно для пользователя осуществляется доступ к уже загруженным данным, представленным в виде кода XML на локальном компьютере, а соединение с сервером разрывается. Такой способ называется работой без соединения, что существенно экономит ресурсы сервера для доступа других пользователей.
Выборка данных с использованием объекта DataReader
- В отдельной папке для размещения лабораторной работы создайте новый проект Windows Application для C# с именем DataView
- Поместите в форму из вкладки Windows Forms панели Toolbox элементы управления Label, TextBox, ListBox, Button со свойствами, которые перечислены в таблице
- Разместите на форме управляющие элементы так, как показано на снимке
Обратите внимание, что свойству DataBindings списка не присваивается значение. В данном случае мы будем применять несвязанный с данными элемент управления ListBox. Мы отказались от включения в форму компонетов связи с данными, а будем создавать соответствующие объекты в коде C# на этапе выполнения.
- Создайте обработчик события Click для кнопки Button и заполните его следующим кодом
private void btnLoadList_Click(object sender, System.EventArgs e) { // Описания локальных ссылочных переменных System.Data.OleDb.OleDbCommand ocmdCust; System.Data.OleDb.OleDbDataReader odrCust; // Создается на стеке System.String strSQL; // Сформировать строку SQL strSQL = "SELECT CompanyName FROM Customers WHERE CustomerID LIKE '" + this.txtCustLimit.Text + "%'"; // Выполнение в защищенном режиме с перехватом исключений try { // Создать экземпляр команды ocmdCust = new System.Data.OleDb.OleDbCommand(); // Создать объект соединения и ввести текст команды ocmdCust.Connection = new System.Data.OleDb.OleDbConnection( BuildCnnStr("localhost", "Northwind")); ocmdCust.Connection.Open(); ocmdCust.CommandText = strSQL; // Создать экземпляр объекта чтения данных odrCust = ocmdCust.ExecuteReader( System.Data.CommandBehavior.SequentialAccess); // Заполнить список lstCustomers.Items.Clear(); lstCustomers.BeginUpdate(); while(odrCust.Read()) { int numCol = odrCust.GetOrdinal("CompanyName"); lstCustomers.Items.Add(odrCust.GetString(numCol)); } lstCustomers.EndUpdate(); } catch(System.Data.OleDb.OleDbException oextData) { MessageBox.Show(oextData.Message); } } public static string BuildCnnStr(string strServer, string strDatabase) {// Для доступности из другой формы string strTemp = "Provider=SQLOleDB; Data Source=" + strServer + ";"; strTemp += "Initial Catalog=" + strDatabase + ";"; strTemp += "Integrated Security=SSPI"; return strTemp; }Листинг 8.1. Код обработчика кнопки
- Постройте форму и убедитесь в ее работоспособности. Результат должен быть таким
Здесь мы рассмотрели способ использования элемента управления ListBox, при котором он остается полностью не связанным с данными. Все происходит на этапе выполнения обработчика кнопки.