Транзакции

Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6

Последнее обновление: 31.10.2015

Транзакции позволяют выполнять ряд операций в виде одного целостного пакета. И если хотя бы одна из этих операций завершится неудачно, то произойдет откат выполнения остальных операций.

Для начала транзакции надо вызвать метод BeginTransaction() объекта SqlConnection:

string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlTransaction transaction = connection.BeginTransaction();

    SqlCommand command = connection.CreateCommand();
    command.Transaction = transaction;

    try
    {
        // выполняем две отдельные команды
        command.CommandText = "INSERT INTO Users (Name, Age) VALUES('Tim', 34)";
        command.ExecuteNonQuery();
        command.CommandText = "INSERT INTO Users (Name, Age) VALUES('Kat', 31)";
        command.ExecuteNonQuery();

        // подтверждаем транзакцию
        transaction.Commit();
        Console.WriteLine("Данные добавлены в базу данных");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        transaction.Rollback();
    }
}

Чтобы все операции с объектом SqlCommand выполнялись как одна транзакция, надо присвоить объект транзакции его свойству Transaction:

command.Transaction = transaction;

Для завершения всех операции после их выполнения вызывается метод Commit() объекта SqlTransaction:

transaction.Commit();

Если в ходе выполнения произошла ошибка, то мы можем откатить транзакцию, вызвав метод Rollback():

transaction.Rollback();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850