Сохранение данных в базе данных (несколько таблиц) в платформа .NET Framework приложениях

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

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

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

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

  • Создание и настройка источника данных в приложении с помощью мастера настройки источника данных.

  • Настройка элементов управления в окне источников данных. Дополнительные сведения см. в разделе "Настройка элемента управления для создания при перетаскивании из окна источников данных".

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

  • Изменение нескольких записей в каждой таблице в наборе данных.

  • Изменение кода для отправки обновленных данных в наборе данных обратно в базу данных.

Необходимые компоненты

Чтобы завершить работу с этим руководством, вам потребуется разработка классических приложений .NET и рабочие нагрузки хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Visual Studio Installer и нажмите кнопку "Изменить" (или "Изменить>") рядом с версией Visual Studio, которую вы хотите изменить. См. раздел Изменение Visual Studio.

В этом пошаговом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.

  1. Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studio можно установить SQL Server Express LocalDB как часть рабочей нагрузки хранилища данных и обработки или как отдельный компонент.

  2. Установите пример базы данных Northwind, выполнив следующие действия.

    1. В Visual Studio откройте окно обозреватель объектов SQL Server. (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранилища данных и обработки в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите новый запрос.

      Откроется окно редактора запросов.

    2. Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.

    3. Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку "Выполнить ".

      Через некоторое время запрос завершает работу и создается база данных Northwind.

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

Создайте проект приложения Windows Forms для C# или Visual Basic. Присвойте проекту имя UpdateMultipleTablesWalkthrough.

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

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

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

    Открывается окно Источники данных.

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

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

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

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

      –или–

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

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

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

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

  8. Выберите таблицы "Клиенты и заказы", а затем нажмите кнопку "Готово".

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

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

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

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

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

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

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

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

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

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

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

    Примечание.

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

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

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

Вы можете обновить базу данных, вызвав методы 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();
        }
    }
    

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

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

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

  3. Выберите кнопку Сохранить.

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