Rollback(String)
Метод отменяет текущую транзакцию до указанной точки сохранения.
Установленные точки сохранения до указанной точки сохраняются, последующие – удаляются. Выполнение транзакции продолжается.
Примечание
Данный метод может использоваться в клиентских приложениях, ориентированных исключительно на работу с СУБД ЛИНТЕР.
Синтаксис
public void RollBack(string savePointName);
savePointName – имя точки сохранения.
Возвращаемое значение
Значение типа void.
Исключения
InvalidOperationException | Транзакция уже завершена (подтверждена/отменена/соединение закрыто). | |
ArgumentNullException | Параметр savePointName имеет значение null. | |
ArgumentException | Параметр savePointName равен пустой строке или ссылается на несуществующую точку сохранения. | |
LinterSqlException | Код завершения СУБД ЛИНТЕР не равен 0. |
Пример
// C#
using System;
using System.Data;
using System.Data.LinterClient;
class RollbackSample
{
static void Main()
{
// Соединение с БД
LinterDbConnection con = new LinterDbConnection();
con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";
con.Open();
// Создание объекта LinterDbCommand, связанного с установленным соединением
LinterDbCommand cmd = con.CreateCommand();
// Создаем тестовую таблицу
cmd.CommandText = "create or replace table test (abc varchar(255))";
cmd.ExecuteNonQuery();
// Начинаем транзакцию в режиме Exclusive
LinterDbTransaction txn = con.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = txn;
// Делаем первый insert в тестовую таблицу
cmd.CommandText = "insert into test (abc) values ('запись 1')";
cmd.ExecuteNonQuery();
// Создаем точку сохранения SP1
txn.Save("SP1");
// Делаем второй insert в тестовую таблицу
cmd.CommandText = "insert into test (abc) values ('запись 2')";
cmd.ExecuteNonQuery();
// Создаем точку сохранения SP2
txn.Save("SP2");
// Делаем третий insert в тестовую таблицу
cmd.CommandText = "insert into test (abc) values ('запись 3')";
cmd.ExecuteNonQuery();
// Создаем точку сохранения SP3
txn.Save("SP3");
// Выполняем метод Rollback(SP2)
txn.Rollback("SP2");
// Выполняем метод Commit() для всей транзакции
txn.Commit();
// Читаем записи из test
cmd.CommandText = "select abc from test";
LinterDbDataReader reader = cmd.ExecuteReader();
// Должны быть только две первых записи
while (reader.Read())
{
Console.WriteLine(reader.GetValue(0));
}
txn.Dispose();
cmd.Dispose();
con.Close();
con.Dispose();
}
}
Результат выполнения примера:
запись 1
запись 2