Обработка баз данных на Visual Basic®.NET
Шрифт:
В главе 6, "ADO.NET: объект DataAdapter" (см. листинги 6.1 и 6.2) представлена функция Read Data, которая вставляет в объект DataSet данные из источника данных и отображает содержимое объекта DataSet
РИС. 7.1. Содержимое объекта DataSet с отображениями таблицы и полей
Листинг 7.5. Измененная версия функции ReadDataMapped для отображения таблицы и полей
По умолчанию отображение таблицы называется Table. Оно применяется в том случае, если в методе Fill (или методе Update) используется только имя объекта DataSet. Однако его можно указать явно вместе с нужным именем таблицы с помощью приведенного ниже кода.
Это приведет к созданию таблицы MyTableName и вставке данных в нее.
Объект DataView
Объект DataView позволяет одновременно создавать разные представления данных из объекта DataTable и обладает перечисленными ниже свойствами, которые позволяют настраивать способ отображения данных.
• Порядок сортировки (нисходящий или восходящий) по одному или нескольким полям.
• Выражение для фильтрации записей, которое указывает критерии отображения записей на основе значений полей.
• Фильтр состояния записи, который указывает критерии отображения записей на основе состояния записи (см. перечисление DataViewRowState, показанное в
Хотя этот способ может показаться аналогичным способу на основе использования метода Select объекта DataTable, они существенно отличаются. С одной стороны, объект DataView – это полностью динамичное представление данных. Помимо изменений значений полей, вставки и удаления записей в таблице-источнике немедленно отражаются в объекте DataView. С другой стороны, метод Select возвращает массив фиксированный длины со ссылками на записи, которые отражают изменения значений полей в таблице-источнике, но не отражают вставку и удаление записей или их упорядочение. Этот динамический аспект объекта DataView особенно эффективно применяется для создания кода, связанного с данными.
Хотя объект DataView аналогичен классическому представлению базы данных, он все же отличается от него следующим:
• не может использоваться как таблица;
• не может быть объединением нескольких таблиц;
• не может исключать поля, которые присутствуют в таблице-источнике;
• не может включать дополнительные поля (например, вычисленные поля), которых нет в таблице-источнике.
Объекты DataView используются с помощью свойства DefaultView объекта DataTable. Предположим, нужно создать представление для таблицы Customers, причем клиенты в нем должны быть упорядочены по почтовым индексам и иметь фамилии, начинающиеся с символа С. Для этого нужно использовать указанные ниже значения двух соответствующих свойств.
Если необходимо отобразить в представлении текущие значения только из тех записей, которые были изменены (но еще не сохранены), то нужно указать новое значение для свойства RowFilter и значение свойства RowState.
Объект DataView также имеет метод Find для поиска одной записи и метод FindRows для поиска и возвращения нескольких записей. Если нужно извлечь или набор записей, которые соответствуют заданному критерию, вместо динамического представления данных, то с помощью методов Find и FindRows (вместо указания свойства RowFilter) будут возвращены только интересующие нас записи. Этот метод обладает более высокой производительностью, чем метод на основе установки значения свойства RowFilter. Дело в том, что указание значения свойства RowFilter вызывает перестройку индекса представления, а методы Find и FindRows используют уже существующие индексы.
Для таблицы могут быть созданы также дополнительные объекты – представления данных. Для определения еще одного представления таблицы Customers нужно создать еще один объект dvView2 и указать его свойства так, как показано ниже.
Теперь, после определения объекта DataView, можно изменить его свойства.