Rollback транзакции в C#
Вызов Rollback отменяет вставки и
обновления текущей транзакции. Соединение
при этом остаётся открытым.
После INSERT и Rollback
COUNT(*) равен 0:
using Microsoft.Data.Sqlite;
using SqliteConnection db = new("Data Source=:memory:");
db.Open();
using (SqliteCommand c = db.CreateCommand())
{
c.CommandText = "CREATE TABLE t (v INT)";
c.ExecuteNonQuery();
}
using SqliteTransaction tx = db.BeginTransaction();
using (SqliteCommand ins = db.CreateCommand())
{
ins.Transaction = tx;
ins.CommandText = "INSERT INTO t VALUES (1)";
ins.ExecuteNonQuery();
}
tx.Rollback();
using SqliteCommand q = db.CreateCommand();
q.CommandText = "SELECT COUNT(*) FROM t";
Console.WriteLine(q.ExecuteScalar());
Без явной транзакции каждая команда сразу
сохраняется сама: это отдельный автокоммит.
Rollback отменяет только то, что начато
через BeginTransaction.
Положите на счёт 80. Внутри транзакции
прибавьте 20, затем отмените её и
выведите баланс.