Пошаговое руководство. Сохранение данных в базе данных (несколько таблиц)

 

Опубликовано: Апрель 2016

Одним из наиболее распространенных сценариев в разработке приложений является отображение данных на форме в приложении Windows, изменение этих данных и отправка обновленных данных обратно в базу данных. Это пошаговое руководство описывает создание формы, отображающей данные из двух связанных таблиц, правку записей и сохранение изменений в базе данных. В данном примере используются таблицы Customers и Orders из учебной базы данных "Борей".

Вы можете сохранить данные из приложения в базе данных, вызвав метод Update адаптера таблицы. При перетаскивании элементов из окна Источники данных код для сохранения данных автоматически добавляется для первой таблицы, помещенной на форму. Для добавляемых на форму дополнительных таблиц код для сохранения данных требуется добавлять вручную. Это пошаговое руководство описывает добавление кода для сохранения обновлений из нескольких таблиц.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров. Для получения дополнительной информации см. Customizing Development Settings in Visual Studio.

В данном пошаговом руководстве представлены следующие задачи.

Обязательные компоненты

Для выполнения данного пошагового руководства требуется:

Создание приложения Windows

Первым шагом является создание Приложения Windows. На данном этапе имя проекту можно не назначать, однако мы зададим его, так как позднее планируем сохранить проект.

Порядок создания нового проекта приложения Windows

  1. Перейдите в меню Файл и создайте новый проект.

  2. Присвойте проекту имя UpdateMultipleTablesWalkthrough.

  3. Выберите Приложение Windows и нажмите кнопку ОК. Для получения дополнительной информации см. Клиентские приложения.

    Создается проект UpdateMultipleTablesWalkthroug, который добавляется в Обозреватель решений.

Создание источника данных

На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных "Борей". Для создания подключения необходимо иметь доступ к учебной базе данных "Борей". Дополнительные сведения о настройке учебной базы данных "Борей" см. в разделе Практическое руководство. Установка образцов баз данных.

Создание источника данных

  1. В меню Данные выберите команду Показать источники данных.

  2. В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.

  3. На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.

  4. На странице Выбор подключения к базе данных выполните одно из следующих действий.

    • Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.

      -или-

    • Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.

  5. Если базе данных требуется пароль, выберите параметр для включения конфиденциальных данных и щелкните Далее.

  6. На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.

  7. Разверните узел Таблицы на странице Выбор объектов базы данных.

  8. Выберите таблицы Customers и Orders и нажмите Готово.

    Объект NorthwindDataSet добавляется в проект, и таблицы отображаются в окне Источники данных.

Настройка создаваемых элементов управления

В рамках этого пошагового руководства данные из таблицы Customers будут находиться в макете Сведения, где данные отображаются в отдельных элементах управления. Данные из таблицы Orders будут находиться в макете Сетка, отображаясь в элементе управления DataGridView.

Установка типа удаления для элементов в окне "Источники данных"

  1. Разверните узел Клиенты в окне Источники данных.

  2. Измените элемент управления таблицы Клиенты на отдельные элементы управления, выбрав Сведения в списке элементов управления в узле Клиенты. Для получения дополнительной информации см. Задание поведения, при котором элемент управления создается при перетаскивании из окна "Источники данных".

Создание формы с привязкой к данным

Вы можете создавать элементы управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.

Создание элементов управления с привязкой к данным на форме

  1. Перетащите главный узел Клиенты из окна Источники данных на Form1.

    Привязанные к данным элементы управления с метками описания отображаются на форме вместе с панелью инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.

  2. Перетащите связанный узел Заказы из окна Источники данных на Form1.

    Примечание

    Связанный узел Заказы расположен под столбцом Факс и является дочерним для узла Клиенты.

    На форме появляется элемент DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов отображается OrdersTableAdapter и BindingSource.

Добавление кода для обновления базы данных

Вы можете обновить базу данных, вызвав методы Update адаптеров таблицы Клиенты и Заказы. По умолчанию обработчик событий для кнопки Сохранить BindingNavigator добавляется в код формы для отправки обновлений в базу данных. Данная процедура изменяет этот код для отправки обновлений в нужном порядке, устраняя возможность возникновения ошибок целостности данных. Этот код также реализует обработку ошибок, упаковывая вызов обновления в блок try-catch. Вы можете изменить этот код в соответствии с потребностями своего приложения.

Примечание

Для ясности в этом пошаговом руководстве не используется транзакция, однако в случае обновления двух и более связанных таблиц следует включить всю логику обновления в транзакцию. Транзакция — это процесс, который подтверждает успешное внесение связанных изменений в базу данных перед фиксацией изменений. Для получения дополнительной информации см. Транзакции и параллелизм.

Добавление логики обновления в приложение

  1. Дважды нажмите кнопку Сохранить на BindingNavigator, чтобы открыть редактор кода с обработчиком событий bindingNavigatorSaveItem_Click.

  2. Замените код в обработчике событий на вызов методов Update связанных адаптеров таблицы. Следующий код сначала создает три временные таблицы данных для хранения обновленной информации для каждого 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();
                    }
                }
    
            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
    

Тестирование приложения

Тестирование приложения

  1. Нажмите клавишу F5.

  2. Внесите изменения в данные одной или нескольких записей в каждой таблице.

  3. Нажмите кнопку Сохранить.

  4. Проверьте значения в базе данных и убедитесь, что изменения были сохранены.

Следующие действия

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

См. также

Пошаговые руководства работы с данными
Привязка элементов управления Windows Forms к данным в Visual Studio
Общие сведения о приложениях для работы с данными в Visual Studio
Подключение к данным в Visual Studio
Подготовка приложения к получению данных
Выборка данных в приложение
Привязка элементов управления к данным в Visual Studio
Редактирование данных в приложении
Проверка данных
Сохранение данных