Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Транзакции позволяют выполнять ряд операций в виде одного целостного пакета. И если хотя бы одна из этих операций завершится неудачно, то произойдет откат выполнения остальных операций.
Для начала транзакции надо вызвать метод 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();