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


Заполнение наборов данных с помощью TableAdapters в приложениях платформа .NET Framework

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

Компонент TableAdapter заполняет набор данных данными из базы данных на основе одного или нескольких запросов или хранимых процедур, указанных вами. TableAdapters также может выполнять добавления, обновления и удаления в базе данных для сохранения изменений, внесенных в набор данных. Вы также можете выдавать глобальные команды, которые не связаны с какой-либо конкретной таблицей.

Примечание.

ТаблицыAdapters создаются конструкторами Visual Studio. Если вы создаете наборы данных программным способом, используйте DataAdapter, который является классом .NET.

Подробные сведения об операциях TableAdapter можно перейти непосредственно к одной из следующих разделов:

Раздел Описание
Создание и настройка адаптеров таблиц Как использовать конструкторы для создания и настройки TableAdapters
Создание параметризованных запросов адаптера таблицы Как разрешить пользователям предоставлять аргументы процедурам или запросам TableAdapter
Непосредственный доступ к базе данных с помощью адаптера таблицы Использование методов Dbdirect в TableAdapters
Отключение ограничений при заполнении набора данных Как работать с ограничениями внешнего ключа при обновлении данных
Практическое руководство. Расширение функциональных возможностей адаптера таблицы Добавление пользовательского кода в TableAdapters
Считывание XML-данных в набор данных Как работать с XML

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

TableAdapters — это созданные конструктором компоненты, которые подключаются к базе данных, выполняют запросы или хранимые процедуры и заполняют их DataTable возвращаемыми данными. TableAdapters также отправляет обновленные данные из приложения обратно в базу данных. Вы можете выполнять столько запросов, сколько требуется для TableAdapter, если они возвращают данные, соответствующие схеме таблицы, с которой связан TableAdapter. На следующей схеме показано, как TableAdapters взаимодействуют с базами данных и другими объектами в памяти:

Поток данных в клиентском приложении

Хотя TableAdapters разработаны с помощью конструктора наборов данных, классы TableAdapter не создаются как вложенные классы DataSet. Они находятся в отдельных пространствах имен, относящихся к каждому набору данных. Например, если у вас есть набор данных с именем NorthwindDataSet, таблицаAdapters, связанная с DataTables в NorthwindDataSet NorthwindDataSetTableAdapters пространстве имен. Чтобы получить доступ к определенному tableAdapter программным способом, необходимо объявить новый экземпляр TableAdapter. Например:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

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

customersTableAdapter.Fill(northwindDataSet.Customers);

Связанная схема DataTable

При создании TableAdapter используйте начальный запрос или хранимую процедуру для определения схемы связанной DataTableтаблицыAdapter. Вы запускаете этот первоначальный запрос или хранимую процедуру, вызвав метод TableAdapter (который заполняет связанные DataTabletableAdapterFill). Все изменения, внесенные в основной запрос TableAdapter, отражаются в схеме связанной таблицы данных. Например, удаление столбца из основного запроса также удаляет столбец из связанной таблицы данных. Если какие-либо дополнительные запросы в TableAdapter используют инструкции SQL, возвращающие столбцы, которые не находятся в основном запросе, конструктор пытается синхронизировать изменения столбца между основным запросом и дополнительными запросами.

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

Функциональные возможности обновления TableAdapter зависят от того, сколько сведений доступно в основном запросе в мастере TableAdapter. Например, TableAdapters, настроенные для получения значений из нескольких таблиц (с помощью JOINскалярных значений, представлений или результатов агрегатных функций, изначально не создаются с возможностью отправки обновлений обратно в базовую базу данных. Однако вы можете настроить INSERTUPDATEкоманды и DELETE команды вручную в окне "Свойства".

запросы TableAdapter

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

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

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

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

Свойство ClearBeforeFill

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

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

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

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

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

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

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

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

TableAdapters используют команды данных для чтения и записи из базы данных. Используйте начальный Fill (основной) запрос TableAdapter в качестве основы для создания схемы связанной таблицы данных, а также InsertCommandUpdateCommandкоманд, DeleteCommand связанных с методомTableAdapter.Update. Вызов метода TableAdapter запускает инструкции, созданные при первоначальной настройке TableAdapter Update , а не один из дополнительных запросов, добавленных с помощью мастера настройки запросов TableAdapter.

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

Примечание.

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

TableAdapter GenerateDbDirectMethods

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

Если вы не хотите создавать эти прямые методы, задайте для свойства GenerateDbDirectMethods свойства TableAdapter значение (в окне свойств false ). Дополнительные запросы, добавленные в TableAdapter, являются автономными запросами— они не создают эти методы.

Поддержка TableAdapter для типов, допускающих значение NULL

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

Справочник по TableAdapterManager

По умолчанию класс TableAdapterManager создает при создании набора данных, содержащего связанные таблицы. Чтобы предотвратить создание класса, измените значение Hierarchical Update свойства набора данных на false. При перетаскивании таблицы, которая имеет отношение к области конструктора страницы Windows Form или WPF, Visual Studio объявляет переменную члена класса. Если вы не используете привязку данных, необходимо вручную объявить переменную.

Класс TableAdapterManager не является типом .NET. Поэтому его нельзя найти в документации. Он создается во время разработки в рамках процесса создания набора данных.

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

Элемент Description
UpdateAllМетод Сохраняет все данные из всех таблиц данных.
Свойство BackUpDataSetBeforeUpdate Определяет, следует ли создавать резервную копию набора данных перед выполнением TableAdapterManager.UpdateAll метода. Булев.
Свойство tableName TableAdapter Представляет адаптер таблицы. Созданный TableAdapterManager содержит свойство для каждого TableAdapter управляемого объекта. Например, набор данных с таблицей "Клиенты и заказы" создается с помощью TableAdapterManager, содержащей CustomersTableAdapter и OrdersTableAdapter свойства.
Свойство UpdateOrder Управляет порядком отдельных команд вставки, обновления и удаления. Задайте для этого одно из значений перечисления TableAdapterManager.UpdateOrderOption .

По умолчанию UpdateOrder для свойства InsertUpdateDelete задано значение InsertUpdateDelete. Это означает, что вставки, а затем обновления, а затем удаления выполняются для всех таблиц в наборе данных.

Безопасность

При использовании команд данных с заданным Textсвойством CommandType тщательно проверьте сведения, отправляемые клиентом перед передачей в базу данных. Злоумышленники могут попытаться отправить (внедрить) модифицированные или добавочные инструкции SQL и получить незаконный доступ к базе данных или повредить ее. Прежде чем передавать входные данные пользователя в базу данных, всегда убедитесь, что информация действительна. Рекомендуется всегда использовать параметризованные запросы или хранимые процедуры, когда это возможно.