Заполнение наборов данных с помощью 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
скалярных значений, представлений или результатов агрегатных функций, изначально не создаются с возможностью отправки обновлений обратно в базовую базу данных. Однако вы можете настроить INSERT
UPDATE
команды и DELETE
команды вручную в окне "Свойства".
запросы 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 на основе таблицы в базе данных с именем Orders
tableAdapter называется OrdersTableAdapter
TableAdapter. Имя класса TableAdapter можно изменить с помощью свойства Name в конструкторе наборов данных.
Ниже приведены часто используемые методы и свойства TableAdapters:
Элемент | Description |
---|---|
TableAdapter.Fill |
Заполняет связанную таблицу данных TableAdapter результатами команды TableAdapter SELECT . |
TableAdapter.Update |
Отправляет изменения обратно в базу данных и возвращает целое число, представляющее количество строк, затронутых обновлением. Дополнительные сведения см. в разделе "Обновление данных с помощью TableAdapter". |
TableAdapter.GetData |
Возвращает новое DataTable , заполненное данными. |
TableAdapter.Insert |
Создает новую строку в таблице данных. Дополнительные сведения см. в статье "Вставка новых записей в базу данных". |
TableAdapter.ClearBeforeFill |
Определяет, очищается ли таблица данных перед вызовом одного из Fill методов. |
Метод обновления TableAdapter
TableAdapters используют команды данных для чтения и записи из базы данных. Используйте начальный Fill
(основной) запрос TableAdapter в качестве основы для создания схемы связанной таблицы данных, а также InsertCommand
UpdateCommand
команд, DeleteCommand
связанных с методомTableAdapter.Update
. Вызов метода TableAdapter запускает инструкции, созданные при первоначальной настройке TableAdapter Update
, а не один из дополнительных запросов, добавленных с помощью мастера настройки запросов TableAdapter.
При использовании TableAdapter она эффективно выполняет те же операции с командами, которые обычно выполняются. Например, при вызове метода адаптера Fill
адаптер запускает команду данных в своем SelectCommand
свойстве и использует средство чтения данных (например, SqlDataReader) для загрузки результирующий набор в таблицу данных. Аналогичным образом при вызове метода адаптера Update
выполняется соответствующая команда (в UpdateCommand
InsertCommand
и DeleteCommand
свойствах) для каждой измененной записи в таблице данных.
Примечание.
Если в основном запросе достаточно информации, InsertCommand
UpdateCommand
команды и DeleteCommand
команды создаются по умолчанию при создании TableAdapter. Если основной запрос TableAdapter превышает одну инструкцию таблицы SELECT
, возможно, конструктор не сможет создать InsertCommand
, UpdateCommand
и DeleteCommand
. Если эти команды не создаются, при запуске TableAdapter.Update
метода может возникнуть ошибка.
TableAdapter GenerateDbDirectMethods
InsertCommand
Помимо , UpdateCommand
и DeleteCommand
, TableAdapters создаются с методами, которые можно запускать непосредственно в базе данных. Эти методы можноTableAdapter.Insert
TableAdapter.Update
TableAdapter.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 и получить незаконный доступ к базе данных или повредить ее. Прежде чем передавать входные данные пользователя в базу данных, всегда убедитесь, что информация действительна. Рекомендуется всегда использовать параметризованные запросы или хранимые процедуры, когда это возможно.