Пошаговое руководство. Сохранение данных в транзакции в приложениях платформа .NET Framework
Примечание.
Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.
В этом пошаговом руководстве показано, как сохранять данные в транзакции с помощью System.Transactions пространства имен. В этом пошаговом руководстве вы создадите приложение Windows Forms. Мастер настройки источника данных используется для создания набора данных для двух таблиц в образце базы данных Northwind. Вы добавите элементы управления, привязанные к данным, в форму Windows, и вы измените код кнопки сохранения BindingNavigator, чтобы обновить базу данных внутри TransactionScope.
Необходимые компоненты
Чтобы завершить работу с этим руководством, вам потребуется разработка классических приложений .NET и рабочие нагрузки хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Visual Studio Installer и нажмите кнопку "Изменить" (или "Изменить>") рядом с версией Visual Studio, которую вы хотите изменить. См. раздел Изменение Visual Studio.
В этом пошаговом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.
Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studio SQL Server Express LocalDB можно установить как часть рабочей нагрузки разработки классических приложений .NET или как отдельный компонент.
Установите пример базы данных Northwind, выполнив следующие действия.
В Visual Studio откройте окно обозреватель объектов SQL Server. (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранилища данных и обработки в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите новый запрос.
Откроется окно редактора запросов.
Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку "Выполнить ".
Через некоторое время запрос завершает работу и создается база данных Northwind.
Создание приложения Windows Forms
Первым шагом является создание приложения Windows Forms (платформа .NET Framework).
В Visual Studio в меню Файл выберите пункты Создать>Проект.
Разверните Visual C# или Visual Basic в левой области, а затем выберите "Рабочий стол Windows".
В средней области выберите тип проекта приложения Windows Forms.
Назовите проект SavingDataInATransactionWalkthrough и нажмите кнопку "ОК".
Создается проект SavingDataInATransactionWalkthrough, который добавляется в Обозреватель решений.
Создание источника данных базы данных
На этом шаге мастер настройки источника данных используется для создания источника данных на Customers
Orders
основе таблиц в примере базы данных Northwind.
Чтобы открыть окно "Источники данных" , в меню "Данные " выберите " Показать источники данных".
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На экране "Выбор типа источника данных" выберите "База данных" и нажмите кнопку "Далее".
На экране выбора подключения к данным выполните одно из следующих действий:
Если подключение к образцу базы данных Northwind доступно в раскрывающемся списке, выберите его.
–или–
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение и создайте подключение к базе данных "Борей".
Если для базы данных требуется пароль, выберите параметр для включения конфиденциальных данных и нажмите кнопку "Далее".
На экране "Сохранить строка подключения в файл конфигурации приложения" нажмите кнопку "Далее".
На экране "Выбор объектов базы данных" разверните узел "Таблицы".
Customers
Выберите иOrders
таблицы, а затем нажмите кнопку "Готово".Объект NorthwindDataSet добавляется в проект, и таблицы
Customers
иOrders
отображаются в окне Источники данных.
Добавление элементов управления на форму
Вы можете создавать элементы управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
В окне "Источники данных" разверните узел "Клиенты".
Перетащите главный узел Customers из окна Источники данных на форму Form1.
На форме появляется элемент DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. Объект NorthwindDataSet,
CustomersTableAdapter
BindingSourceи BindingNavigator отображается в области компонентов.Перетащите связанный узел Orders (не основной узел Orders, но связанный узел дочерней таблицы под столбцом Факса) в форму под CustomersDataGridView.
На форме появляется DataGridView. BindingSource И
OrdersTableAdapter
отображается в области компонентов.
Добавление ссылки на сборку System.Transactions
Транзакции используют пространство имен System.Transactions. Ссылка проекта на сборку system.transactions не добавляется по умолчанию, поэтому вам нужно добавить ее вручную.
Порядок добавления ссылки на DLL-файл System.Transactions
В меню Проект выберите пункт Добавить ссылку.
Выберите System.Transactions (на вкладке
.NET
), а затем нажмите кнопку "ОК".Ссылка на System.Transactions добавляется в проект.
Изменение кода в кнопке SaveItem в BindingNavigator
Для первой таблицы, отложенной на форму, код добавляется по умолчанию к click
событию кнопки сохранения на панели BindingNavigator. Для обновления дополнительных таблиц вам необходимо добавить такой код вручную. В этом пошаговом руководстве мы рефакторингом существующего кода сохранения из обработчика событий нажатия кнопки "Сохранить". Мы также создадим несколько методов для предоставления конкретных функций обновления на основе необходимости добавления или удаления строки.
Изменение автоматически сформированного кода сохранения
Нажмите кнопку "Сохранить" в CustomersBindingNavigator (кнопка со значком диска floppy).
Замените метод
CustomersBindingNavigatorSaveItem_Click
следующим кодом:private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e) { UpdateData(); } private void UpdateData() { this.Validate(); this.customersBindingSource.EndEdit(); this.ordersBindingSource.EndEdit(); using (System.Transactions.TransactionScope updateTransaction = new System.Transactions.TransactionScope()) { DeleteOrders(); DeleteCustomers(); AddNewCustomers(); AddNewOrders(); updateTransaction.Complete(); northwindDataSet.AcceptChanges(); } }
При согласовании изменений связанных данных применяется следующий порядок.
Удаление дочерних записей. (В этом случае удалите записи из
Orders
таблицы.)Удаление родительских записей. (В этом случае удалите записи из
Customers
таблицы.)Вставка родительских записей. (В этом случае вставьте записи в таблицу
Customers
.)Вставка дочерних записей. (В этом случае вставьте записи в таблицу
Orders
.)
Удаление существующих заказов
Добавьте следующий метод
DeleteOrders
в Form1:private void DeleteOrders() { NorthwindDataSet.OrdersDataTable deletedOrders; deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); if (deletedOrders != null) { try { ordersTableAdapter.Update(deletedOrders); } catch (System.Exception ex) { MessageBox.Show("DeleteOrders Failed"); } } }
Удаление существующих клиентов
Добавьте следующий метод
DeleteCustomers
в Form1:private void DeleteCustomers() { NorthwindDataSet.CustomersDataTable deletedCustomers; deletedCustomers = (NorthwindDataSet.CustomersDataTable) northwindDataSet.Customers.GetChanges(DataRowState.Deleted); if (deletedCustomers != null) { try { customersTableAdapter.Update(deletedCustomers); } catch (System.Exception ex) { MessageBox.Show("DeleteCustomers Failed"); } } }
Добавление новых клиентов
Добавьте следующий метод
AddNewCustomers
в Form1:private void AddNewCustomers() { NorthwindDataSet.CustomersDataTable newCustomers; newCustomers = (NorthwindDataSet.CustomersDataTable) northwindDataSet.Customers.GetChanges(DataRowState.Added); if (newCustomers != null) { try { customersTableAdapter.Update(newCustomers); } catch (System.Exception ex) { MessageBox.Show("AddNewCustomers Failed"); } } }
Добавление новых заказов
Добавьте следующий метод
AddNewOrders
в Form1:private void AddNewOrders() { NorthwindDataSet.OrdersDataTable newOrders; newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); if (newOrders != null) { try { ordersTableAdapter.Update(newOrders); } catch (System.Exception ex) { MessageBox.Show("AddNewOrders Failed"); } } }
Выполнение приложения
Нажмите клавишу F5 для запуска приложения.