Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 8:

Просмотр данных средствами ADO.NET с привязкой на этапе выполнения

Аннотация: Выборка данных с использованием объекта DataReader. Выборка данных из базы данных SQL Server с применением объекта DataTable. Поиск записей с помощью объекта DataRow. Отбор и сортировка записей с помощью объекта DataView.

Файлы к лабораторной работе Вы можете скачать здесь.

В данной работе мы рассмотрим различные способы извлечения данных для просмотра из базы данных Northwind. При этом все соединения с базой данных и заполнения данными элементов просмотра будут осуществляться во время выполнения. Это не означает, что соединение с базой данных будет открыто на всем протяжении работы с формой.

Соединение открывается лишь на то время, когда происходит заполнение таблицы данными. После этого незаметно для пользователя осуществляется доступ к уже загруженным данным, представленным в виде кода XML на локальном компьютере, а соединение с сервером разрывается. Такой способ называется работой без соединения, что существенно экономит ресурсы сервера для доступа других пользователей.

Выборка данных с использованием объекта DataReader

  • В отдельной папке для размещения лабораторной работы создайте новый проект Windows Application для C# с именем DataView


  • Поместите в форму из вкладки Windows Forms панели Toolbox элементы управления Label, TextBox, ListBox, Button со свойствами, которые перечислены в таблице
Значения свойств элементов управления
Объект Свойство Значение
Label Text Customer: ( клиент )
  TextAlign MiddleRight
TextBox Name txtCustLimit
  Text A (латинское)
ListBox Name lstCustomers
  Dock Bottom
Button Name btnLoadList
  Text Load List
  • Разместите на форме управляющие элементы так, как показано на снимке


Обратите внимание, что свойству 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, при котором он остается полностью не связанным с данными. Все происходит на этапе выполнения обработчика кнопки.

Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000