Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Классы DataSet и связанные классы являются устаревшими технологиями .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти, пока приложения отключены от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных являются проверенными успешными технологиями, рекомендуемый подход для новых приложений .NET заключается в использовании Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей и имеет более простой интерфейс программирования.
Одним из наиболее распространенных сценариев разработки приложений является отображение данных в форме в приложении Windows, редактирование данных и отправка обновленных данных обратно в базу данных. В этом пошаговом руководстве создается форма, которая отображает данные из двух связанных таблиц и показывает, как редактировать записи и сохранять изменения обратно в базу данных. В этом примере используются таблицы Customers
и Orders
из образца базы данных Northwind.
Вы можете сохранить данные в приложении обратно в базу данных, вызвав Update
метод TableAdapter. При перетаскивании таблиц из окна источников данных в форму автоматически добавляется код, необходимый для сохранения данных. Для любых дополнительных таблиц, добавленных в форму, требуется ручное добавление этого кода. В этом пошаговом руководстве показано, как добавить код для сохранения обновлений из нескольких таблиц.
Задачи, показанные в этом пошаговом руководстве, включают:
Создание и настройка источника данных в приложении с помощью мастера настройки источника данных.
Настройка элементов управления в окне источников данных. Дополнительные сведения см. в разделе "Настройка элемента управления для создания при перетаскивании из окна источников данных".
Создание элементов управления, привязанных к данным, путем перетаскивания элементов из окна источников данных в форму.
Изменение нескольких записей в каждой таблице в наборе данных.
Изменение кода для отправки обновленных данных в набор данных обратно в базу данных.
Предпосылки
Чтобы пройти это руководство, вам потребуются рабочие компоненты для разработки приложений для настольных ПК на .NET и хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Установщик Visual Studio и выберите Изменить (или Дополнительно>Изменить) рядом с версией Visual Studio, которую вы хотите изменить. См. изменения в Visual Studio.
В этом пошаговом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.
Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studioможно установить SQL Server Express LocalDB в рамках рабочей нагрузки хранилища данных и обработки или как отдельный компонент.
Установите пример базы данных Northwind, выполнив следующие действия.
В Visual Studio откройте окно обозревателя объектов SQL Server. (Обозреватель объектов SQL Server устанавливается как часть рабочей нагрузки хранилища данных и обработки в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите Новый запрос.
Откроется окно редактора запросов.
Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
Вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку Выполнить.
Через некоторое время запрос завершает работу и создается база данных Northwind.
Создание приложения Windows Forms
Создайте проект приложения Windows Forms для C# или Visual Basic. Присвойте проекту имя UpdateMultipleTablesWalkthrough.
Создание источника данных
На этом шаге создается источник данных из базы данных Northwind с помощью мастера настройки источника данных. Для создания подключения необходимо иметь доступ к образцу базы данных Northwind. Сведения о настройке примера базы данных Northwind см. в разделе Практическое руководство: Установка примеров баз данных.
В меню "Данные" выберите "Показать источники данных".
Откроется окно "Источники данных ".
В окне "Источники данных" выберите "Добавить новый источник данных ", чтобы запустить мастер настройки источника данных.
На экране "Выбор типа источника данных " выберите "База данных" и нажмите кнопку "Далее".
На экране выбора подключения к данным выполните одно из следующих действий.
Если в раскрывающемся списке доступно подключение к образцу базы данных Northwind, выберите его.
-или-
Выберите "Создать подключение", чтобы открыть диалоговое окно "Добавление и изменение подключения ".
Если для базы данных требуется пароль, выберите параметр для включения конфиденциальных данных и нажмите кнопку "Далее".
В строке "Сохранить подключение" в файл конфигурации приложения нажмите кнопку "Далее".
На экране "Выбор объектов базы данных " разверните узел "Таблицы ".
Выберите таблицы "Клиенты и заказы ", а затем нажмите кнопку "Готово".
NorthwindDataSet добавляется в проект, а таблицы отображаются в окне источников данных.
Задать параметры создаваемых элементов управления
В этом пошаговом руководстве данные в Customers
таблице представлены в формате сведений, где данные отображаются в отдельных элементах управления. Данные из Orders
таблицы отображаются в виде сетки, которая представлена в элементе DataGridView управления.
Установка типа удаления элементов в окне "Источники данных"
В окне "Источники данных" разверните узел "Клиенты ".
На узле "Клиенты" выберите "Сведения" из списка элементов управления, чтобы изменить элемент управления таблицей "Клиенты " на отдельные элементы управления. Дополнительные сведения см. в разделе "Настройка элемента управления для создания при перетаскивании из окна источников данных".
Создание формы, привязанной к данным
Элементы управления с привязкой к данным можно создать, перетащив элементы из окна источников данных в форму.
Перетащите основной узел Customers из окна источников данных в Form1.
Элементы управления с привязкой к данным с описательными метками отображаются в форме вместе с полосой инструментов (BindingNavigator) для навигации по записям. Объект NorthwindDataSet,
CustomersTableAdapter
, BindingSource, и BindingNavigator отображаются в области компонентов.Перетащите связанный узел Orders из окна источников данных в Form1.
Замечание
Связанный узел Orders находится под столбцом Факса и является дочерним узлом узла Customers .
Элемент управления DataGridView и полоса инструментов BindingNavigator для навигации по записям находятся на форме.
OrdersTableAdapter
и BindingSource отображаются в области компонентов.
Добавление кода для обновления базы данных
Вы можете обновить базу данных, вызвав Update
методы Клиенты и Заказы TableAdapters. По умолчанию обработчик событий для кнопкиBindingNavigator"Сохранить" в код формы добавляется для отправки обновлений в базу данных. Эта процедура изменяет код для отправки обновлений в правильном порядке. Это устраняет возможность возникновения ошибок целостности ссылок. Код также реализует обработку ошибок путем упаковки вызова обновления в блок try-catch. Вы можете изменить код в соответствии с потребностями приложения.
Замечание
Для ясности в этом пошаговом руководстве не используется транзакция. Однако если вы обновляете две или более связанные таблицы, включите всю логику обновления в транзакцию. Транзакция — это процесс, обеспечивающий успешное выполнение всех связанных изменений в базе данных до фиксации любых изменений. Дополнительные сведения см. в разделе "Транзакции и параллелизм".
Добавление логики обновления в приложение
Нажмите кнопку "Сохранить " на вкладке BindingNavigator. Откроется редактор кода для обработки события
bindingNavigatorSaveItem_Click
.Замените код в обработчике событий, чтобы вызывать методы
Update
у соответствующих TableAdapters. Следующий код сначала создает три временные таблицы данных для хранения обновленных данных для каждого DataRowState (Deleted, Added, и Modified). Обновления выполняются в правильном порядке. Код должен выглядеть следующим образом:this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { // Remove all deleted orders from the Orders table. if (deletedOrders != null) { ordersTableAdapter.Update(deletedOrders); } // Update the Customers table. customersTableAdapter.Update(northwindDataSet.Customers); // Add new orders to the Orders table. if (newOrders != null) { ordersTableAdapter.Update(newOrders); } // Update all modified Orders. if (modifiedOrders != null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch (System.Exception ex) { MessageBox.Show("Update failed"); } finally { if (deletedOrders != null) { deletedOrders.Dispose(); } if (newOrders != null) { newOrders.Dispose(); } if (modifiedOrders != null) { modifiedOrders.Dispose(); } }
Тестирование приложения
Нажмите клавишу F5.
Внесите некоторые изменения в данные одной или нескольких записей в каждой таблице.
Выберите кнопку Сохранить.
Проверьте значения в базе данных, чтобы убедиться, что изменения сохранены.