Свойства и методы объекта Command
Вывод данных в элемент ListView приводит к достаточно удовлетворительному результату, однако более привычным для нас является вывод в элемент DataGrid. Раньше, при использовании объекта DataSet, мы указывали источник данных для элемента DataGrid так:
dataGrid1.DataSource = dataset.Tables["Название_таблицы"].DefaultView;
Или так:
dataGrid1.DataSource = dataset;
Объект DataReader не поддерживает аналогичного вывода - мы не можем связать объекты таким простым образом:
dataGrid1.DataSource = datareader;
Одним из способов вывода является применение дополнительных объектов DataTable. Объект DataTable предназначен для хранения таблицы, полученной из базы данных (в "Объекты DataTable, DataRow и DataColumn" мы рассмотрим подробно этот объект). Создайте новое приложение и назовите его "DataReaderToDataGrid". Перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.SqlClient;
В классе формы создаем следующие объекты:
SqlConnection conn = null; //Создаем экземпляр FullDataTable, в который будут помещаться данные DataTable FullDataTable = new DataTable(); //Создаем экземпляр ShemaDataTable для получения структуры таблицы из базы данных 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();
}
}Возможно, этот код показался вам сложным. Лучше будет к нему вернуться еще раз после изучения "Объект DataView. Вывод связанных таблиц" . Запускаем приложение (рис. 6.28):
В программном обеспечении к курсу вы найдете приложение Data ReaderToDataGrid (Code\Glava3\ DataReaderToDataGrid).
