Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Direction = ParameterDirection.Input }; cmdInsert.Parameters.Add(parameterId2); cmdInsert.Parameters.Add(parameterFirstName); cmdInsert.Parameters.Add(parameterLastName); // Это будет получено из объекта подключения. SqlTransaction tx = null; try { tx = _sqlConnection.BeginTransaction(); // Включить команды в транзакцию. cmdInsert.Transaction = tx; cmdUpdate.Transaction = tx; // Выполнить команды. cmdInsert.ExecuteNonQuery(); cmdUpdate.ExecuteNonQuery(); // Эмулировать ошибку. if (throwEx) { throw new Exception("Sorry! Database error! Tx failed..."); // Возникла ошибка, связанная с базой данных! Отказ транзакции... } // Зафиксировать транзакцию! tx.Commit(); } catch (Exception ex) { Console.WriteLine(ex.Message); // Любая ошибка приведет к откату транзакции. // Использовать условную операцию для проверки на предмет null. tx?.Rollback(); } finally { CloseConnection(); }}Здесь используется входной параметр типа
boolОбратите внимание на применение двух объектов
SqlCommandcustomerIDBeginTransaction()SqlTransactionTransactionПосле вызова метода
ExecuteNonQuery()booltrueCommit()Тестирование транзакции базы данных
Выберите одного из клиентов, добавленных в таблицу
CustomersDave BennerId = 1Program.csAutoLot.ClientFlagCustomer()void FlagCustomer(){ Console.WriteLine("***** Simple Transaction Example *****n"); // Простой способ позволить транзакции успешно завершиться или отказать. bool throwEx = true; Console.Write("Do you want to throw an exception (Y or N): "); // Хотите ли вы сгенерировать исключение? var userAnswer = Console.ReadLine(); if (string.IsNullOrEmpty(userAnswer) || userAnswer.Equals("N",StringComparison.OrdinalIgnoreCase)) { throwEx = false; } var dal = new InventoryDal(); // Обработать клиента 1 - ввести идентификатор клиента, // подлежащего перемещению. dal.ProcessCreditRisk(throwEx, 1); Console.WriteLine("Check CreditRisk table for results"); // Результаты ищите в таблице CreditRisk Console.ReadLine();}Если вы запустите программу и укажете на необходимость генерации исключения, то обнаружите, что фамилия клиента в таблице
CustomersCustomersCreditRisksВыполнение массового копирования с помощью ADO.NET
В случае, когда необходимо загрузить много записей в базу данных, показанные до сих пор методы будут довольно неэффективными. В SQL Server имеется средство, называемое массовым копированием, которое предназначено специально для таких сценариев, и в ADO.NET для него предусмотрена оболочка в виде класса
SqlBulkCopy