Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Использование метода ExecuteReader




Использование метода ExecuteScalar

 

Применять метод ExecuteScalar объекта Command в Windows-приложениях очень легко - достаточно указать элемент управления (текстовое поле, надпись) для вывода одиночного значения.

 

Теперь рассмотрим метод ExecuteReader. Одна из главных задач при использовании этого метода - разместить возвращаемый набор данных в элементе управления на форме.

Создайте новое приложение. Расположите на форме элемент ListBox, его свойству Dock установите значение Bottom. Добавим элемент Splitter, свойству Dock которого также установим значение Bottom. Наконец, перетаскиваем элемент ListView, свойству Dock которого устанавливаем значение Fill.

Далее, нужно настроить внешний вид элемента ListView: в окне Properties в поле свойства Columns нажимаем на кнопку (...).

В редакторе «Column Header Collection Editor» добавляем следующие четыре элемента:

Name Text
chTouristID Код туриста
chFamily Фамилия
chFirstName Имя
chMiddleName Отчество

Для отображения созданных столбцов свойству View элемента устанавливаем значение Details. Также включим режим отображения линий сетки - в свойстве GridLines выбираем значение True. Сделанные изменения немедленно отобразятся на элементе.

Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем объекты conn и dataReader:

SqlConnection conn = null;
SqlDataReader dataReader;

В конструкторе формы добавляем код для заполнения данными элементов управления:

public Form1() {
InitializeComponent();
try {
conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
@"D:\ВМИ\For ADO\BDTur_firmSQL2.mdf" +
"integrated Security=True;Connect Timeout=30;User Instance=True";
conn.Open();
SqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = "SELECT * FROM Туристы";
dataReader = myCommand.ExecuteReader();
while (dataReader.Read()) {
// Создаем переменные, получаем для них значения из объекта dataReader,
//используя метод GetТипДанных
int TouristID = dataReader.GetInt32(0);
string Family = dataReader.GetString(1);
string FirstName = dataReader.GetString(2);
string MiddleName = dataReader.GetString(3);
//Выводим данные в элемент listBox1
listBox1.Items.Add("Код туриста: " + TouristID+ " Фамилия: " + Family + " Имя: "+ FirstName + " Отчество: " + MiddleName);
//Создаем экземпляр item класса ListViewItem для записи в него
//данных из dataReader
ListViewItem item = new ListViewItem(new string[]
{Convert.ToString(dataReader[0]), Convert.ToString(dataReader[1]),
Convert.ToString(dataReader[2]), Convert.ToString(dataReader[3])});
listView1.Items.Add(item);
}
}
catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
finally {
dataReader.Close();
conn.Close();
}
}

Метод GetТипДанных позволяет приводить значения, возвращаемые объектом DataReader, если заранее известен их тип данных.

Запускаем приложение. На форму выводятся данные в виде списка в элементе ListBox и в виде таблицы в элементе ListView (рис. 91).

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

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

Или так:

dataGridView1.DataSource = dataset;

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

dataGridView1.DataSource = datareader;

Рис. 91. Использование метода ExecuteReader

Одним из способов вывода является применение дополнительных объектов DataTable. Объект DataTable предназначен для хранения таблицы, полученной из базы данных.

Создадим новое приложение. Перетаскиваем на форму элемент управления 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;
//Создаем объект myDataRow для помещения записей
DataRow myDataRow;
Основной код помещаем в конструктор формы:
public Form1() {
InitializeComponent();
try {
conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
@"D:\ВМИ\For ADO\BDTur_firmSQL2.mdf" +
"integrated Security=True;Connect Timeout=30;User Instance=True";
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();
}
}

Запускаем приложение (рис. 92):

Рис. 92. Демонстрация работы приложения

 




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


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


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



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




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