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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

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

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

  2. Назовите проект UpdateMultipleTablesWalkthrough.

  3. Выберите Приложение Windows и нажмите кнопку OK.Дополнительные сведения см. в разделе Разработка клиентских приложений.

    Проект UpdateMultipleTablesWalkthrough будет создан и добавлен в Обозреватель решений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ПримечаниеПримечание

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

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

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

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

ПримечаниеПримечание

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

Чтобы добавить логику обновления в приложение

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

  2. Замените код в обработчике событий на вызов методов 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();
        }
    }
    

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

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

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

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

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

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

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

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

См. также

Основные понятия

Новые возможности разработки приложений для работы с данными в Visual Studio 2012

Привязка элементов управления Windows Forms к данным в Visual Studio

Подготовка приложения к получению данных

Выборка данных в приложение

Привязка элементов управления к данным в Visual Studio

Редактирование данных в приложении

Проверка данных

Сохранение данных

Другие ресурсы

Пошаговые руководства работы с данными

Общие сведения о приложениях для работы с данными в Visual Studio

Подключение к данным в Visual Studio