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



Применение методов объекта Command в Windows-приложениях. Параметризированные запросы - часть 6


Метод "GetТипДанных" позволяет приводить значения, возвращаемые объектом DataReader, если заранее известен их тип данных. Запускаем приложение. На форму выводятся данные в виде списка в элементе ListBox и в виде таблицы в элементе ListView (рис. 6.27):

 Приложение ExamWinExecuteReader

Рис. 6.27.  Приложение ExamWinExecuteReader

В программном обеспечении к курсу вы найдете приложение ExamWin ExecuteReader (Code\Glava3\ ExamWinExecuteReader).

Вывод данных в элемент ListView приводит к достаточно удовлетворительному результату, однако более привычным для нас является вывод в элемент DataGrid. Раньше, при использовании объекта DataSet, мы указывали источник данных для элемента DataGrid так:

dataGrid1.DataSource = dataset.Tables["Название_таблицы"].DefaultView;

Или так:

dataGrid1.DataSource = dataset;

Объект DataReader не поддерживает аналогичного вывода - мы не можем связать объекты таким простым образом:

dataGrid1.DataSource = datareader;

Одним из способов вывода является применение дополнительных объектов DataTable. Объект DataTable предназначен для хранения таблицы, полученной из базы данных (в восьмой лекции мы рассмотрим подробно этот объект). Создайте новое приложение и назовите его "DataReaderToDataGrid". Перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем следующие объекты:

SqlConnection conn = null; //Создаем экземпляр FullDataTable, в который будут помещаться данные DataTable FullDataTable = new DataTable(); //Создаем экземпляр FullDataTable для получения структуры таблицы из базы данных DataTable ShemaDataTable = new DataTable(); SqlDataReader dataReader; SqlCommand myCommand; //Создаем объект objectRow для получения информации о числе столбцов object[] objectRow;

Основной код помещаем в конструктор формы:

public Form1() { InitializeComponent(); try { conn = new SqlConnection(); conn.ConnectionString = "integrated security=SSPI;data source=\".\"; persist security info=False; initial catalog=BDTur_firm2"; conn.Open(); myCommand = conn.CreateCommand(); myCommand.CommandText = "SELECT * FROM Туристы"; dataReader = myCommand.ExecuteReader(); //Вызываем метод GetSchemaTable, который получает схему таблицы из базы //и передает ее объекту ShemaDataTable ShemaDataTable = dataReader.GetSchemaTable(); //Свойство FieldCount возвращает число столбцов для текущей записи. //Передаем это значение объекту objectRow objectRow = new object[dataReader.FieldCount]; //Определяем структуру объекта FullDataTable for(int i =0; i <dataReader.FieldCount; i++) { FullDataTable.Columns.Add(ShemaDataTable.Rows[i] ["ColumnName"].ToString(), ((System.Type)ShemaDataTable.Rows[i] ["DataType"])); } //Добавляем записи в объект FullDataTable while(dataReader.Read()) { dataReader.GetValues(objectRow); myDataRow = FullDataTable.Rows.Add(objectRow); } //Определяем источник данных для элемента dataGrid1 dataGrid1.DataSource = FullDataTable; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { dataReader.Close(); conn.Close(); } }




Содержание  Назад  Вперед