Категории
Войти
Поиск
Реклама
дешевый где купить металлоискатель fisher Все, что вам нужноПолезное:
Приобрести автобусные туры в испанию
на нашем сайте вы имеете возможность приобрести автобусные туры в испанию прямо сейчас
www.petrotour.ru
Новые статьи
Опечатка?
Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!
Счетчики
| Как устроен типизированный набор данных |
|
Прежде чем обсуждать вопросы создания типизированных наборов данных, давайте рассмотрим, что именно генерируется при их создании. Они используются во многих примерах статьи, и понимание того, что будет внутри конкретного набора данных при определенном знании о схеме, из которой он получен, поможет вам разобраться в загадках типизированных наборов данных. Типизированный набор данных реализуется как набор классов, производных от базовых классов, составляющих набор данных. Для каждой таблицы в наборе вы имеете класс, производный от самого DataSet, и класс, производный от классов DataTable и DataRow. Например, при создании типизированного набора данных, содержащего таблицу Customers из учебной базы данных Northwind, будет генерирован набор классов, иллюстрируемый 2.1 (используется нотация UML). После генерации типизированного набора данных для таблицы Customers вы получите класс CustomersDataSet, производный от DataSet (вы можете назвать его как угодно). В определении класса CustomersDataSet содержатся два определения вложенных классов: CustomersDataTable, производный от DataTable, и CustomersRow, производный от DataRow. Каждый из этих классов определяет ряд дополнительных свойств и методов, обеспечивающих типизированный доступ к данным. На уровне набора данных нас более всего интересует свойство Customers, предоставляющее безопасный по типу доступ к экземпляру класса CustomersDataTable, содержащемуся в данном наборе. Класс CustomersDataTable экспонирует безопасный индексатор, позволяющий перебирать строки таблицы в виде экземпляров безопасного по типу класса CustomersRow. Свойство Count позволяет определить при итерации число доступных строк, а если вы просматриваете строки в режиме «только чтение», то можете в С# применить цикл foreach. Для каждого из столбцов таблицы, таких, как CustomerlDColumn, CompanyNameColumn и т.д. (все они относятся к типу DataColumn), имеются именованные свойства, из которых по именам столбцов можно извлечь информацию о типах данных, как вскоре будет продемонстрировано в примере кода. Класс CustomersDataTable также содержит безопасный метод с именем NewCustomerRow, служащий для создания новой строки типа CustomersRow, а после заполнения строки данными вам остается лишь вызвать метод AddCustomerRow, чтобы вставить строку в таблицу. Нововведение .NET 2.0 состоит в том, что класс типизированной таблицы экспонирует ряд сильно типизированных событий, запускаемых всякий раз, когда строка в таблице обновляется, вставляется или удаляется. Эти события представлены попарно, с именами CustomersRowChanging, CustomersRowChanged, CustomersRowDeleting и CustomersRowDeleted. Событие CustomersRowChanging запускается перед тем, как строка будет зафиксирована в таблице, что позволяет вам выполнить верификацию данных, а событие CustomersRowChanged генерируется уже после внесения изменений в таблицу; то же самое относится и к событиям, связанным с удалением. События изменения охватывают как вставку в таблицу, так и модификацию существующих строк. Аргументы события, передаваемые обработчикам, содержат ссылку на строку и перечислимое значение, указывающее тип выполненного над строкой действия. Далее, класс CustomersRow экспонирует значения в столбцах строки через типизированные свойства, которые соответствуют конкретным типам данных, содержащихся в столбцах. Это позволяет обращаться со значением столбца в строке как с сильно типизированным значением. По умолчанию имена этих свойств будут соответствовать именам столбцов, как их определяет схема, по которой генерировался набор данных. Однако вы можете переопределить стандартные имена, что полезно, если в своем коде вы придерживаетесь иных соглашений об именах свойств, чем те, что используются для столбцов в базе данных. Это позволяет также избежать необходимости обновлять весь код, являющийся потребителем набора, когда на уровне базы данных у вас просто меняется имя столбца, без изменения смысла и типа данных в столбце. Чтобы воспользоваться этой возможностью, установите свойства Name и source столбца в конструкторе набора данных. Name задает именованное свойство в классе типизированной строки данных, а свойство Source является именем столбца в базе данных.
Newer news items:
Older news items:
|
