Пошаговое руководство. Сохранение данных в базе данных (несколько таблиц)
Одним из наиболее распространенных сценариев при разработке приложений является отображение данных на форме приложения Windows, изменение данных и отправка обновленных данных обратно в базу данных. В этом пошаговом руководстве создается форма, отображающая данные из двух связанных таблиц, и демонстрируется изменение записей и сохранение изменений в базе данных. В этом пошаговом руководстве используются таблицы Customers и Orders из образца базы данных "Борей".
Можно сохранить данные в приложении базы данных, вызвав метод Update объекта TableAdapter. При перетаскивании элементов из окна Источники данных код для сохранения данных автоматически добавляется для первой таблицы, перетащенной на форму. Любые дополнительные таблицы, добавленные в форму, требуют добавления любого кода, необходимого для сохранения данных, вручную. В данном пошаговом руководстве показано, как добавить код для сохранения обновлений из нескольких таблиц.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.
В этом пошаговом руководстве демонстрируется выполнение следующих задач.
Создание нового проекта Приложение Windows.
Создание и настройка источника данных в приложении с мастер настройки источника данных.
Настройка элементов управления из элементов в Окно "Источники данных". Дополнительные сведения см. в разделе Практическое руководство. Установка элемента управления, создаваемого при перетаскивании из окна "Источники данных".
Создание элементов управления с привязкой к данным при помощи перетаскивания элементов из окна Источники данных на форму.
Изменение пары записей в каждой таблице в наборе данных.
Изменение кода отправки обновленных данных в наборе данных обратно в базу данных.
Обязательные компоненты
Для выполнения этого пошагового руководства потребуется следующее.
- Доступ к образцу базы данных "Борей". Дополнительные сведения см. в разделе Практическое руководство. Установка образцов баз данных.
Создание приложения Windows
Первым шагом является создание Приложения Windows. Присвоение проекту имени является необязательным на этом этапе, но мы присвоим ему имя, так как планируем впоследствии его сохранить.
Для создания нового проекта приложения Windows
В меню Файл создайте новый проект.
Назовите проект UpdateMultipleTablesWalkthrough.
Выберите Приложение Windows и нажмите кнопку OK. Дополнительные сведения см. в разделе Создание приложения для Windows.
Проект UpdateMultipleTablesWalkthrough будет создан и добавлен в Обозреватель решений.
Создание источника данных
На этом шаге создается источник данных из базы данных "Борей" с помощью Мастера настройки источника данных. Для создания подключения необходимо иметь доступ к образцу базы данных "Борей". Сведения о настройке учебной базы данных Northwind см. в разделе Практическое руководство. Установка образцов баз данных.
Для создания источника данных,
В меню Данные выберите команду Показать источники данных.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
На странице Выбор подключения базы данных выполните одно из следующих действий:
Если подключение к образцу базы данных "Борей" доступно в раскрывающемся списке, то выберите его.
– или –
Выберите Создать подключение для открытия диалогового окна Добавить/изменить подключение. Дополнительные сведения см. в разделе Диалоговое окно "Добавить/Изменить подключение" (вкладка "Общие").
Если базе данных требуется пароль, выберите параметр для включения конфиденциальных данных и щелкните Далее.
Щелкните Далее на странице Сохранить строку подключения в файле конфигурации приложения.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицы Customers и Orders и нажмите Готово.
NorthwindDataSet добавляется к проекту и таблицы отображаются в окне Источники данных.
Установка создаваемых элементов управления
В данном пошаговом руководстве данные в таблице Customers будут в макете Сведения, где данные отображаются в отдельных элементах управления. Данные из таблицы Orders будут в макете Сетка, отображаемом в элементе управления DataGridView.
Для установки типа переноса для элементов в окне "Источники данных"
Разверните узел Customers в окне Источники данных.
Замените элемент управления таблицы Customers на отдельные элементы управления, выбрав Сведения из списка элементов управления на узле Customers. Дополнительные сведения см. в разделе Практическое руководство. Установка элемента управления, создаваемого при перетаскивании из окна "Источники данных".
Создание формы с привязкой к данным
Можно создавать элементы управления с привязкой к данным, перетаскивая элементы из окна Источники данных на форму.
Чтобы создать элементы управления с привязкой к данным на форме:
Перетащите главный узел Customers из окна Источники данных на Form1.
Элементы управления с привязкой к данным с подписями описания появятся на форме вместе с панелью инструментов (BindingNavigator) для управления записями. NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator появляются в области компонентов.
Перетащите связанный узел Orders из окна Источники данных на форму Form1.
Примечание
Связанный узел Orders находится под столбцом Факс и является дочерним узлом узла Customers.
На форме появится элемент управления DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. OrdersTableAdapter и BindingSource отображаются в области компонентов.
Добавление кода для обновления базы данных
Можно обновить базу данных, вызывая методы Update адаптеров таблиц TableAdapter Customers и Orders. По умолчанию обработчик событий для кнопки Сохранить панели BindingNavigator добавляется в код формы для отправки обновлений в базу данных. Эта процедура изменяет код для отправки обновлений в нужном порядке, чтобы исключить вероятность возникновения ошибок целостности данных. Кроме того, код реализует обработку ошибок путем заключения вызова обновления в блок try-catch. Можно изменить код в соответствии с требованиями приложения.
Примечание
Для ясности в данном пошаговом руководстве не используется транзакция, но при обновлении двух или более связанных таблиц следует заключить всю логику обновления в транзакцию.Транзакция — это процесс, гарантирующий, что все взаимосвязанные изменения в базе данных будут успешными вплоть до фиксации изменений.Дополнительные сведения см. в разделе Транзакции и параллелизм (ADO.NET).
Чтобы добавить логику обновления в приложение
Дважды щелкните кнопку Сохранить на BindingNavigator, чтобы открыть редактор кода для обработчика событий bindingNavigatorSaveItem_Click.
Замените код в обработчике событий на вызов методов Update связанных адаптеров таблиц TableAdapter. Следующий код сначала создает три временных таблицы данных для хранения обновленной информации для каждого DataRowState (Deleted, Added и Modified). Затем обновления выполняются в нужном порядке. Код должен выглядеть следующим образом:
Me.Validate() Me.OrdersBindingSource.EndEdit() Me.CustomersBindingSource.EndEdit() Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable) Dim newOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable) Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable) Try ' Remove all deleted orders from the Orders table. If Not deletedOrders Is Nothing Then OrdersTableAdapter.Update(deletedOrders) End If ' Update the Customers table. CustomersTableAdapter.Update(NorthwindDataSet.Customers) ' Add new orders to the Orders table. If Not newOrders Is Nothing Then OrdersTableAdapter.Update(newOrders) End If ' Update all modified Orders. If Not modifiedOrders Is Nothing Then OrdersTableAdapter.Update(modifiedOrders) End If NorthwindDataSet.AcceptChanges() Catch ex As Exception MsgBox("Update failed") Finally If Not deletedOrders Is Nothing Then deletedOrders.Dispose() End If If Not newOrders Is Nothing Then newOrders.Dispose() End If If Not modifiedOrders Is Nothing Then modifiedOrders.Dispose() End If End Try
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.
Внесите изменения в данные одной или нескольких записей в каждой таблице.
Нажмите кнопку Сохранить.
Проверьте значения в базе данных, чтобы убедиться, что изменения были сохранены.
Примечание
Пример кода, который демонстрирует обновление списка заказов при изменении клиента или добавлении новой информации о клиенте и заказах, см. в разделах Практическое руководство. Вставка новых записей в базу данных и Пошаговое руководство. Сохранение данных связанных таблиц данных (иерархическое обновление).
Следующие действия
В зависимости от требований приложения существуют несколько шагов, которые, возможно, потребуется выполнить после создания формы с привязкой к данным в приложении Windows. Ниже приводится перечень рекомендаций, позволяющих улучшить полученный результат.
Добавление функциональных возможностей поиска на форму. Дополнительные сведения см. в разделе Практическое руководство. Добавление параметризованного запроса в приложение Windows Forms.
Изменение источника данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе Практическое руководство. Редактирование набора данных.
См. также
Основные понятия
Новые возможности разработки приложений для работы с данными
Привязка элементов управления Windows Forms к данным в Visual Studio
Привязка элементов управления к данным в Visual Studio
Другие ресурсы
Пошаговые руководства работы с данными
Общие сведения о приложениях для работы с данными в Visual Studio
Подключение к данным в Visual Studio
Подготовка приложения к получению данных
Редактирование данных в приложении
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Май 2011 |
Добавлены ссылки на дополнительные примеры кода. |
Обратная связь от клиента. |