Класс TableAdapter
Он является ключевым звеном в цепочке связи данных с пользовательскими элементами управления. Если провести аналогию с терминами М. Фаулера [], то TableAdapter является шлюзом таблицы данных для DataTable. Он инкапсулирует в себе логику обновления загрузки и поиска данных и относится к Data Access Layer. Что же касается DataSet и DataTable, то их можно отнести к уровню бизнес-логики (Business Layer)
Visual Studio .Net 2005 сама позаботилась о генерации кода этого класса. Давайте посмотрим, что же она нам предлагает. Итак:
- методы Fill() и GetData() – единственное отличие в том, что Fill принимает существующую DataTable в качестве аргумента, а GetData() создает новую, заполняет её данными и возвращает клиенту.
- Свойство ClearBeforeFill, которое используется вышеназванными методами для определения, стоит ли очищать таблицу перед её заполнением.
- Стандартный набор CRUD операций: insert, update, delete, среди которых присуствуют перегруженные методы с типизированными аргументами, соответствующими таблице базы данных
- Общее свойство Connection
Так же у нас есть возможность создать дополнительные запросы к базе данных. Для этого нам понадобится инструмент Search Criteria Builder. Для его запуска необходимо у нашего адаптера выбрать пункт меню «Add Query»:
Вводим название запроса (а фактически название нового метода в вашем TableAdapte-е), а так же его текст, либо вручную указав условие выборки, либо используя инструмент Query Builder:
ПРИМЕЧАНИЕ.При записи условия выборки используйте позиционные параметры (символ «?»). Код метода будет сгенерирован автоматически, так что особого неудобства это не доставит. |
После всех операций будет сгенерирован соответствующий метод. Так же дизайнер VS .Net 2005 добавит компонент ToolStrip к вашей форме с кнопкой запуска этого метода и полем для задания фильтра. Мне кажется это излишним, но, может быть, кому-нибудь понравится.
СОВЕТ. Visual Studio .Net 2005 разделяет код, используемый дизайнером и пользовательский код за счет partial классов. В нормальном приложении нам наверняка понадобиться расширить логику TableAdapter. Сделать это можно, описав partial class, соответствующий классу конкретного TableAdapter-a, сгенерированного дизайнером. |