Студопедия

КАТЕГОРИИ:


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

Применение объекта DataReader




Чтобы использовать объект Command с запросами, возвращающими несколько значений, следует обратиться к методу Execute Reader. Он возвращает объект DataReader DataReader — это упрощенный объект, обеспечивающий быстрое и эффективное последовательное однонаправленное чтение данных. Объект Data Reader позволяет перебирать записи результирующего набора, передавая нужные значения напрямую коду приложения. При этом DataSet намного эффективнее, но менее гибок по сравнению с DataAdapter. Данные, полученные через объект DataSet, доступны только для чтения, поэтому их нельзя модифицировать средствами DataSet. При этом данные разрешается просматривать только в одном направлении: нельзя вернуться к записи, прочитанной ранее. Кроме того, объект DataReader ориентирован на использование постоянных соединений и, пока он существует, требует монопольного доступа к активному соединению.

Объект DataReader нельзя создать напрямую, это делается путем вызова метода ExecuteReader объекта Command. Подобно другим членам классов провайдеров данных, у каждого класса DataProvider есть собственный класс DataReader. Объект OleDbCommand возвращает OleDbDataReader, а объект SqlCommand — Sql Data Reader,

При вызове метода ExecuteReader объект Command исполняет представленную им команду и создает объект DataReader соответствующего типа, который можно записать в переменную ссылочного типа.

Получив ссылку на объект DataReader, можно просматривать записи, загружая нужные данные в память. У нового объекта DataReader указатель чтения устанавливается на первую запись результирующего набора. Чтобы сделать ее доступной, следует вызвать метод Read. Если запись доступна, метод Read переводит указатель объекта DataReader к следующей записи и возвращает True (true), в противном случае метод Read возвращает False (false). Таким образом, метод Read используют для перебора записей в цикле While.

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

Прочитав данные с помощью DataReader, следует вызвать метод Close, чтобы закрыть DataReader, в противном случае объект DataReader будет удерживать монопольный доступ к активному соединению, сделав его недоступным другим объектам. При вызове метода ExecuteReader, установив свойство Command Behavior в CloseConneciion, вы автоматически закроете соединение, не вызывая метод Close явно.

Если полученные строки предполагается сохранить в объекте DataTable, считывание данных выполняется проще – с помощью метода Load объекта DataTable.

Приведенный пример иллюстрирует применение метода ExecuteReader и запроса с параметрами.

DataTable dt = new DataTable();

using (SqlConnection cnn = new SqlConnection(

"Data Source=(local); Initial Catalog=var5sql;" +

" Integrated Security=true"))

{

SqlCommand cmd = new SqlCommand(

"select abon, TCHK_NAM from F107 where TCHK_NAM like @param union " +

" select abon, TCHK_NAM from f115 where TCHK_NAM like @param", cnn);

cmd.Add("@param", SqlDbType.VarChar).Value = textBox1.Text;

cnn.Open();

dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));

}

dataGridView1.DataSource = dt;




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


Дата добавления: 2014-01-20; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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