Поделиться через


Общие сведения об адаптере таблиц

 

Опубликовано: Апрель 2016

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

Пользователи предыдущих версий Visual Studio могут представить TableAdapter как DataAdapter с встроенным объектом подключения и возможностью хранить несколько запросов. Каждый запрос, добавляемый в TableAdapter, представляется как общий метод, вызываемый как любой другой метод или функция объекта.

В дополнение к стандартным функциональным возможностям DataAdapter адаптеры таблиц предоставляют дополнительные типизированные методы, которые инкапсулируют запросы, совместно использующие общую схему со связанной типизированной DataTable. Другими словами, в TableAdapter можно иметь сколько угодно запросов до тех пор, пока они возвращают данные, которые соответствуют одной и той же схеме.

В предыдущей версии Visual Studio адаптеры обработки данных ADO.NET использовались для связи между приложением и базой данных. Хотя адаптеры до сих пор являются основным компонентом поставщиков данных Поставщики данных .NET Framework, адаптеры таблиц — это компоненты, создаваемые разработчиком, которые улучшают функциональность адаптеров данных DataAdapter. Как правило, адаптеры таблиц содержат методы Fill и Update для извлечения и обновления данных в базе данных.

Адаптеры таблиц создаются Конструктором наборов данных внутри строго типизированных наборов данных. Можно создавать адаптеры таблиц во время создания нового набора данных в мастере мастер настройки источника данных. Адаптеры таблиц можно также создавать в существующих наборах данных при помощи мастера мастер настройки адаптера таблицы или путем перетаскивания объектов базы данных из обозревателя серверов в Конструктор наборов данных. Для получения дополнительной информации см. Практическое руководство. Создание адаптера таблицы.

Если адаптеры таблиц создаются с помощью Конструктора наборов данных, созданные классы адаптеров таблиц не создаются как вложенные классы DataSet. Они находятся в разных пространствах имен для каждого набора данных. Например, если у вас есть набор данных с именем NorthwindDataSet, то адаптеры таблиц, связанные с DataTable в NorthwindDataSet, будут находиться в пространстве имен NorthwindDataSetTableAdapters. Для доступа к конкретному адаптеру таблиц из программы необходимо объявить новый экземпляр TableAdapter. Например:

            NorthwindDataSet northwindDataSet = new NorthwindDataSet();

            NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
                new NorthwindDataSetTableAdapters.CustomersTableAdapter();

            customersTableAdapter.Fill(northwindDataSet.Customers);
        Dim northwindDataSet As New NorthwindDataSet()
        Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

        customersTableAdapter.Fill(northwindDataSet.Customers)

Связанная схема объекта DataTable

При создании TableAdapter начальный запрос или сохраненная процедура используются для определения схемы адаптера, связанного с DataTable. Этот начальный запрос или сохраненная процедура выполняются путем вызова основного метода адаптера таблицы Fill (который заполняет связанную с адаптером DataTable). Любые изменения, внесенные в основной запрос адаптера TableAdapter, отражаются в схеме связанной таблицы данных. Например, если удалить столбец из основного запроса, то будет удален столбец из связанной таблицы данных. Если какие-либо дополнительные запросы на TableAdapter используют инструкции SQL, возвращающие столбцы, которых нет в главном запросе, тогда конструктор попытается синхронизировать изменения столбцов между основным и дополнительными запросами. Для получения дополнительной информации см. Практическое руководство. Изменение объектов TableAdapter.

Команды обновления TableAdapter

Функциональные возможности обновления адаптера таблиц зависят от того, какая информация доступна на основе основного запроса, заданного в мастере адаптера таблиц. Например, адаптеры таблиц, настроенные для выборки значений из нескольких таблиц (join), скалярные значения, представления или результаты агрегатных функций изначально создаются без возможности отправлять обновления обратно к основной базе данных. Однако можно настроить команды INSERT, UPDATE и DELETE вручную в окне Свойства.

Запросы адаптера таблиц

TableAdapter с несколькими запросами

В отличие от стандартных адаптеров данных, адаптеры таблиц могут содержать несколько запросов для заполнения связанных таблиц. Пользователь может определить столько запросов для TableAdapter, сколько требуется для приложения. При этом каждый запрос возвращает данные, которые соответствуют той же схеме, что и связанная таблица данных. Это позволяет загружать данные, которые удовлетворяют различным критериям. Например, если приложение содержит таблицу клиентов, то можно создать запрос, заполняющий таблицу клиентов, чье имя начинается с определенных букв, и другой запрос, отбирающий всех клиентов, расположенных в одном и том же штате. Для заполнения таблицы Customers сведениями о клиентах, расположенных в определенном штате, можно создать запрос FillByState , принимающий параметр для задания штата: SELECT * FROM Customers WHERE State = @State. Запрос выполняется путем вызова метода FillByState и передачей в параметр значения, например, как следующее значение: CustomerTableAdapter.FillByState("WA"). Для получения дополнительной информации см. Практическое руководство. Создание запросов TableAdapter.

В дополнение к запросам, возвращающим данные из одной и той же схемы, как таблица данных адаптера TableAdapter, можно добавить запросы, возвращающие скалярные (одиночные) значения. Например, созданный запрос, возвращающий число клиентов (SELECT Count(*) From Customers), является допустимым для CustomersTableAdapter, даже если возвращаемые данные не соответствует схеме таблицы.

Свойство ClearBeforeFill

TableAdapter добавляет свойство, недоступное в базовом классе DataAdapter. По умолчанию при каждом выполнении запроса для заполнения таблицы данных адаптера данные очищаются, и в таблицу загружаются только результаты запроса. Задайте свойству ClearBeforeFill значение false, если вы хотите добавлять или объединять данные, возвращенные из запроса существующих данных в таблице данных. Независимо от того, хотите ли вы стереть данные, при необходимости нужно явно отправлять обновления обратно к базе данных. Поэтому не забудьте сохранить любые изменения, внесенные в данные таблицы, перед выполнением другого запроса, заполняющего таблицу. Для получения дополнительной информации см. Практическое руководство. Обновление данных с помощью адаптера таблицы.

Наследование TableAdapter

TableAdapters расширяют функциональные возможности стандартных адаптеров данных, инкапсулируя настроенные DataAdapter. По умолчанию TableAdapter наследует Component и не может быть приведен к классу DataAdapter. Результатом приведения TableAdapter к DataAdapter станет InvalidCastException. Чтобы изменить базовый класс TableAdapter, можно ввести класс, производный от Component в свойстве TableAdapter Базовый класс в Конструкторе наборов данных.

Методы и свойства TableAdapter

Класс TableAdapter не является частью .NET Framework, и его невозможно найти в документации или обозревателе объектов. Он создается во время разработки при использовании одного из мастеров, упомянутых выше. Имя, присвоенное TableAdapter при его создании, основано на имени таблицы, с которой происходит работа. Например, при создании TableAdapter на основе таблицы в базе данных с именем Orders TableAdapter будет иметь имя OrdersTableAdapter. Имя класса TableAdapter можно изменить с помощью свойства Name в Конструкторе наборов данных.

Ниже перечислены часто используемые методы и свойства TableAdapters:

Элемент Описание
TableAdapter.Fill Заполняет таблицу TableAdapter, связанную с адаптером, результатами выполнения команды SELECT, заданной в адаптере. Для получения дополнительной информации см. Практическое руководство. Заполнение данными набора данных.
TableAdapter.Update Отправляет изменения обратно в базу данных и возвращает целое число, представляющее количество обновленных строк. Для получения дополнительной информации см. Практическое руководство. Обновление данных с помощью адаптера таблицы.
TableAdapter.GetData Возвращает новую DataTable, заполненную данными.
TableAdapter.Insert Создает новую строку в таблице данных. Для получения дополнительной информации см. Практическое руководство. Добавление строк в объект DataTable.
TableAdapter.ClearBeforeFill Определяет, очищается ли таблица данных перед вызовом одного из методов Fill.

Метод обновления TableAdapter

TableAdapters использует команды данных для для чтения и записи в базу данных. Начальный (основной) запрос адаптера Fill используется в качестве основы для создания схемы связанной таблицы данных, а также команд InsertCommand, UpdateCommand и DeleteCommand, связанных с методом TableAdapter.Update. Это означает, что вызов метода Update адаптера таблицы выполняет инструкции, созданные при первоначальной настройке адаптера, и ни один из дополнительных запросов не добавлен при помощи Мастера настройки запросов адаптера таблиц.

Во время использования адаптер таблиц эффективно выполняет некоторые операции при помощи команд, которые обычно выполняете вы. Например, при вызове метода Fill адаптера, адаптер выполняет команду в его свойстве SelectCommand и использует считыватель данных (например SqlDataReader) для загрузки результирующего набора в таблицу данных. Аналогично, при вызове метода Update адаптера, он выполняет соответствующую команду (в свойствах UpdateCommand, InsertCommand и DeleteCommand) для каждой измененной записи в таблице данных.

Примечание

Если имеется достаточно сведений в главном запросе, то команды InsertCommand, UpdateCommand и DeleteCommand создаются по умолчанию при создании адаптера таблицы. Если основной запрос адаптера таблицы сложнее, чем одиночная инструкция SELECT, то, возможно, конструктор не сможет создать InsertCommand, UpdateCommand и DeleteCommand. Если эти команды не созданы, то при выполнении метода TableAdapter.Update появится ошибка.

Методы GenerateDbDirectMethods адаптера таблицы

В дополнение к InsertCommand, UpdateCommand и DeleteCommand, адаптеры таблиц создаются с помощью методов, которые могут быть выполнены непосредственно в базе данных. Эти методы (TableAdapter.Insert, TableAdapter.Update и TableAdapter.Delete) можно вызывать напрямую для работы с данными в базе данных. Это означает, что можно вызывать эти отдельные методы из кода вместо вызова TableAdapter.Update для обработки вставок, обновлений и удалений, находящихся в очереди сопоставленной таблицы данных.

Если нет необходимости создавать эти прямые методы, назначьте свойству GenerateDbDirectMethods значение false в окне Свойства. Дополнительные запросы, добавляемые в адаптер таблиц, являются отдельными запросами – они не создают методы.

Поддержка адаптером типов Nullable

Адаптер таблиц поддерживает типы Nullable Nullable(Of T) и T?. Дополнительные сведения о типах Nullable в Visual Basic содержатся в разделе Типы значения, допускающие Null. Дополнительные сведения о типах Nullable в C# содержатся в разделе Использование допускающих значение NULL типов.

См. также

Пошаговые руководства работы с данными
Практическое руководство. Подключение к данным в базе данных
Пошаговое руководство. Подключение к данным в базе данных (Windows Forms)
Подготовка приложения к получению данных
Выборка данных в приложение
Привязка элементов управления к данным в Visual Studio
Редактирование данных в приложении
Проверка данных
Сохранение данных