Студопедия

КАТЕГОРИИ:


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

Обработка данных из DataTable с помощью объектов DataTableReader




Вспомните вашу работу в предыдущем примере, и вы поймете, что способы обработки данных с помощью подключенного уровня (т.е. с помощью объектов чтения данных) и автономного уровня (т.е. с помощью объектов DataSet) весьма различаются. При работе с объектом чтения данных обычно пишется цикл while, вызывается метод Read(), и с помощью индексатора выбираются пары имя/значение. А при обработке DataSet нужен целый ряд циклических конструкций, чтобы добраться до данных, находящихся в таблицах, строках и столбцах (не забывайте, что для DataReader нужно открытое подключение к базе данных, чтобы он мог прочитать данные из реальной базы).

Объекты DataTable поддерживают метод CreateDataReader(). Этот метод позволяет получать данные из DataTable с помощью схемы навигации, похожей на тип чтения данных (объект чтения данных читает данные из находящейся в памяти таблицы DataTable, а не из реальной базы данных, поэтому здесь подключение к базе данных не требуется). Основное преимущество такого подхода состоит в том, что теперь при обработке данных используется единая модель, независимо от уровня ADO.NET, применяемого для получения этих данных. Допустим, в класс Program добавлена следующая вспомогательная функция по имени PrintTable():

static void PrintTable(DataTable dt){ // Создание объекта DataTableReader DataTableReader dtReader = dt.CreateDataReader(); while (dtReader.Read()) { for (int i = 0; i < dtReader.FieldCount; i++) Console.Write("{0}\t",dtReader.GetValue(i).ToString().Trim()); Console.WriteLine(); } dtReader.Close();}

Тип DataTableReader работает точно так же, как и объект чтения данных конкретного поставщика данных. Он очень удобен, если нужно быстро загрузить данными объект DataTable, не путаясь во внутренних коллекциях строк и столбцов. А теперь изменим предыдущий метод PrintDataSet(), чтобы в нем применялись вызовы PrintTable(), а не перебор коллекций Rows и Columns:

static void PrintDataSet(DataSet ds){ // Вывод имени и расширенных свойств Console.WriteLine("*** Объекты DataSet ***\n"); Console.WriteLine("Имя DataSet: {0}", ds.DataSetName); foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties) Console.WriteLine("Ключ = {0}, Значение = {1}", de.Key, de.Value); Console.WriteLine(); // Вывод каждой таблицы foreach (DataTable dt in ds.Tables) { Console.WriteLine("=> Таблица: {0}", dt.TableName); // Вывод имени столбцов for (int curCol = 0; curCol < dt.Columns.Count; curCol++) Console.Write(dt.Columns[curCol].ColumnName + "\t"); Console.WriteLine("\n--------------------------"); // Выводим содержимое таблицы PrintTable(dt); }}

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




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


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


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



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




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