Пошаговое руководство. Сохранение данных в базе данных (несколько таблиц)
Одним из наиболее распространенных сценариев в разработке приложений является отображение данных на форме в приложении Windows, изменение этих данных и отправка обновленных данных обратно в базу данных. Это пошаговое руководство описывает создание формы, отображающей данные из двух связанных таблиц, правку записей и сохранение изменений в базе данных. В данном примере используются таблицы Customers и Orders из учебной базы данных "Борей".
Вы можете сохранить данные из приложения в базе данных, вызвав метод Update адаптера таблицы. При перетаскивании элементов из окна Источники данных код для сохранения данных автоматически добавляется для первой таблицы, помещенной на форму. Для добавляемых на форму дополнительных таблиц код для сохранения данных требуется добавлять вручную. Это пошаговое руководство описывает добавление кода для сохранения обновлений из нескольких таблиц.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Для получения дополнительной информации см. Настройка параметров разработки в Visual Studio.
В данном пошаговом руководстве представлены следующие задачи.
Создание нового проекта Приложение Windows.
Создание и настройка источника данных в приложении с помощью мастер настройки источника данных.
Настройка элементов управления для элементов в окно "Источники данных". Для получения дополнительной информации см. Практическое руководство. Установка элемента управления, создаваемого при перетаскивании из окна "Источники данных".
Создание элементов управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
Изменение пары записей в каждой таблице набора данных.
Изменение кода для отправки обновленных данных в наборе данных обратно в базу данных.
Обязательные компоненты
Для выполнения данного пошагового руководства требуется:
- Доступ к примеру базы данных "Борей". Для получения дополнительной информации см. Практическое руководство. Установка образцов баз данных.
Создание приложения Windows
Первым шагом является создание Приложения Windows. На данном этапе имя проекту можно не назначать, однако мы зададим его, так как позднее планируем сохранить проект.
Порядок создания нового проекта приложения Windows
Перейдите в меню Файл и создайте новый проект.
Присвойте проекту имя UpdateMultipleTablesWalkthrough.
Выберите Приложение Windows и нажмите кнопку ОК. Для получения дополнительной информации см. Разработка клиентских приложений с использованием .NET Framework.
Создается проект UpdateMultipleTablesWalkthroug, который добавляется в Обозреватель решений.
Создание источника данных
На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных "Борей". Для создания подключения необходимо иметь доступ к учебной базе данных "Борей". Дополнительные сведения о настройке учебной базы данных "Борей" см. в разделе Практическое руководство. Установка образцов баз данных.
Создание источника данных
В меню Данные выберите команду Показать источники данных.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
На странице Выбор подключения к базе данных выполните одно из следующих действий.
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
-или-
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
Если базе данных требуется пароль, выберите параметр для включения конфиденциальных данных и щелкните Далее.
На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицы Customers и Orders и нажмите Готово.
Объект NorthwindDataSet добавляется в проект, и таблицы отображаются в окне Источники данных.
Настройка создаваемых элементов управления
В рамках этого пошагового руководства данные из таблицы Customers будут находиться в макете Сведения, где данные отображаются в отдельных элементах управления. Данные из таблицы Orders будут находиться в макете Сетка, отображаясь в элементе управления DataGridView.
Установка типа удаления для элементов в окне "Источники данных"
Разверните узел Клиенты в окне Источники данных.
Измените элемент управления таблицы Клиенты на отдельные элементы управления, выбрав Сведения в списке элементов управления в узле Клиенты. Для получения дополнительной информации см. Практическое руководство. Установка элемента управления, создаваемого при перетаскивании из окна "Источники данных".
Создание формы с привязкой к данным
Вы можете создавать элементы управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
Создание элементов управления с привязкой к данным на форме
Перетащите главный узел Клиенты из окна Источники данных на Form1.
Привязанные к данным элементы управления с метками описания отображаются на форме вместе с панелью инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
Перетащите связанный узел Заказы из окна Источники данных на Form1.
Примечание
Связанный узел Заказы расположен под столбцом Факс и является дочерним для узла Клиенты.
На форме появляется элемент DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов отображается OrdersTableAdapter и BindingSource.
Добавление кода для обновления базы данных
Вы можете обновить базу данных, вызвав методы Update адаптеров таблицы Клиенты и Заказы. По умолчанию обработчик событий для кнопки Сохранить BindingNavigator добавляется в код формы для отправки обновлений в базу данных. Данная процедура изменяет этот код для отправки обновлений в нужном порядке, устраняя возможность возникновения ошибок целостности данных. Этот код также реализует обработку ошибок, упаковывая вызов обновления в блок try-catch. Вы можете изменить этот код в соответствии с потребностями своего приложения.
Примечание
Для ясности в этом пошаговом руководстве не используется транзакция, однако в случае обновления двух и более связанных таблиц следует включить всю логику обновления в транзакцию.Транзакция — это процесс, который подтверждает успешное внесение связанных изменений в базу данных перед фиксацией изменений.Для получения дополнительной информации см. Транзакции и параллелизм.
Добавление логики обновления в приложение
Дважды нажмите кнопку Сохранить на BindingNavigator, чтобы открыть редактор кода с обработчиком событий bindingNavigatorSaveItem_Click.
Замените код в обработчике событий на вызов методов Update связанных адаптеров таблицы. Следующий код сначала создает три временные таблицы данных для хранения обновленной информации для каждого 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