Язык программирования 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
Обратите внимание на применение двух объектов
SqlCommand
customerID
BeginTransaction()
SqlTransaction
Transaction
После вызова метода
ExecuteNonQuery()
bool
true
Commit()
Тестирование транзакции базы данных
Выберите одного из клиентов, добавленных в таблицу
Customers
Dave Benner
Id = 1
Program.cs
AutoLot.Client
FlagCustomer()
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();
}
Если вы запустите программу и укажете на необходимость генерации исключения, то обнаружите, что фамилия клиента в таблице
Customers
Customers
CreditRisks
Выполнение массового копирования с помощью ADO.NET
В случае, когда необходимо загрузить много записей в базу данных, показанные до сих пор методы будут довольно неэффективными. В SQL Server имеется средство, называемое массовым копированием, которое предназначено специально для таких сценариев, и в ADO.NET для него предусмотрена оболочка в виде класса
SqlBulkCopy