Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 247

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 241 242 243 244 245 246 < 247 > 248 249 250 251 252 253 .. 404 >> Следующая


thisDataSet,Tables!'Customers'),Rows[9]['CompanyName']

У объекта DataSet есть свойство Tables, в котором содержится семейство всех объектов DataTabie. Это семейство представляет собой упорядоченный список, откуда следует, что имеется такая возможность доступа к каждому отдельному объекту DataTabie, как если бы он являлся элементом массива, при этом название таблицы используется в качестве индекса:

Tables['Cus tomers' I

В рамках каждого объекта DataTabie есть свойство Rows, которое представляет собой семейство отдельных объектов DataRow; они также хранятся в виде упорядоченного списка, а в качестве индекса используется их номер. Здесь задача немного упрощена, считается, что заранее известен индекс интересующей нас строки, значение которого равно 9 (и который в действительности обозначает десятую строку, поскольку отсчет индексов ведется с нуля; первая строка —это строка Rows(0] или строка с номером 0):

rows [ э ]

В отлнчие от данного примера, в реальной программе потребуется включать в SQL-запрос квалификатор, позволяющий выбирать интересующие нас строки,— вряд ли номера этих строк будут известны заранее. В следующем примере мы будем обсуждать вопрос о том, каким образом можно выбрать только те строки, которые нас интересуют.

Сам объект DataRow обладает индексируемым свойством, позволяющим получать доступ к отдельным столбцам по их названию. Мы используем этот индексатор ДЛЯ доступа К столбцу ['CorapanyName'] строки Rows [Э]: В таблице CompanyName.

Структура объекта DataSet, позволяющая получать доступ к таблицам, строкам и столбцам

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

Переменная thisDataSet обладает типом DataSet, определенным в момент ее объявления. У переменной DataSet есть свойство Tables типа DataTabieColiection; отдельные члены названного семейства имеют тнп DataTabie; доступ к членам указанного семейства осуществляется по имени таблицы — в рассматриваемом случае нас интересует Tables!'Customers*I. DataTabie обладает СВОЙСТВОМ Rows
532 Глава 19

ThisDataSet DataSet
1 r
Tables DataTabteCotlection
Tables [ ‘Customers¦] DatsTsbto Rows DataRowCollectlon

Rows(01 (DataRow)
Rows[1] (DataRow)

Rows[91 (indexer)
(DataRow) Objecting]
[ 'CuStomcr-ID1 J (Object)
[¦CompanySame ¦1 (Object)

типа DataRowcoiiection; члены этого семейства имеют тип DataRow, а доступ к ним осуществляется по номеру строки.

Можно предположить, ЧТО Dataflow обладает СВОЙСТВОМ типа DataColumnCollection, однако на самом деле все оказывается не так просто, поскольку доступ к отдельным столбцам каждой строки требуется осуществлять с учетом типа находящихся в нем данных, в результате чего символьная информация будет преобразовываться в строки, целочисленные значения — в объекты целого типа и т. д.

Для реализации такого подхода используется индексируемое свойство DataRow, которое представляет собой массив объектов общего типа (system.object), индексируемый по имени столбца (которое представляет из себя строку). В этом случае, для получения доступа к данным с помощью индексатора, к объекту DataRow следует применить оператор массива, В нашем примере rows[9] является объектом типа DataRow, поэтому выражение rows[9] [*CompanyName*] ссылается на объект, представляющий столбец с именем CompanyName, расположенный в строке с номером 9.

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

// Пример с использованием нескольких объектов

DataTable euetomezTable “ thisDataSet .Tables! 'Customers*];

DataRow rowNi !¦= customerTable [9] j

Object coropanyName =¦ rowNine t 'CompanyName* J;

Console.WriteLinet'name before change; (0)*, CompanyName);

В данном примере мы объявляем переменную customerrabie типа DataTabie И присваиваем ей таблицу Customers, извлекаемую ИЗ свойства Tables объекта thisDataSet, Затем мы объявляем переменную rowNine типа DataRow и присваиваем ей девятый элемент свойства rows переменной customerTabie. Наконец, мы объявляем переменную CompanyName типа object и используем индексируемое СВОЙСТВО переменной rowNine ДЛЯ присваивания ей ПОЛЯ CompanyName.

Этот пример позволяет проследить всю цепочку последовательно используемых объектов, однако в программе проще использовать однострочное выражение, которое приводит к получению того же самого результата:

Console,WriteLine('name before change: {0)',

thisDataSet.Tables['Customers'] .Rowst9] ['CcunpanyName']) ;
Доступ к данным поср&детлом ADO.NET_______________________________________________________533

Если вариант программы, в котором используется несколько объектов, является для вас более понятным, то вам всегда следует пользоваться только нм. Для однократного обращения в полю — как в приведенном примере — подход с созданием переменных для каждого отдельного объекта н присваиванием им соответствующих значений может оказаться несколько неэффективным, если эти объекты будут использоваться неоднократно, подобный метод может оказаться более эффективным. Оптимизация, выполняемая компилятором, позволит компенсировать неэффективность как при одном подходе к программированию, так и при другом; отсюда следует, что нанлучшнм подходом к программированию является тот, который позволяет получить наиболее удобочитаемую программу.
Предыдущая << 1 .. 241 242 243 244 245 246 < 247 > 248 249 250 251 252 253 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.