Транзакции позволяют выполнять ряд операций в виде одного целостного пакета. И если хотя бы одна из этих операций завершится неудачно, то произойдет откат выполнения остальных операций.
Для начала транзакции надо вызвать метод BeginTransaction()
объекта SqlConnection
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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
:
1 |
command.Transaction = transaction; |
Для завершения всех операции после их выполнения вызывается метод Commit()
объекта SqlTransaction:
1 |
transaction.Commit(); |
Если в ходе выполнения произошла ошибка, то мы можем откатить транзакцию, вызвав метод Rollback()
:
1 |
transaction.Rollback(); |