BeginTransaction(IsolationLevel)
Метод начинает транзакцию по заданному соединению с указанным уровнем изоляции транзакции.
Заданный уровень изоляции транзакций распространяется на все SQL-операторы по соединению.
Метод перекрывает уровень транзакций, заданный в строке подключения.
Нельзя изменить уровень изоляции в ходе выполнения транзакции.
Синтаксис
public DbTransaction BeginTransaction(IsolationLevel isolationLevel);
isolationLevel
– уровень изоляции транзакции (перечисление System.Data.IsolationLevel)
Допустимые значения: ReadCommitted
(Pessimistic
), Snapshot
(Optimistic
).
Примечания
-
Режим Snapshot можно использовать для задания режима Optimistic только в приложениях, ориентированных на работу исключительно с СУБД ЛИНТЕР.
-
Режим Snapshot (Optimistic) устарел. Применять не рекомендуется.
Возвращаемое значение
Объект типа System.Data.Common.DbTransaction
, представляющий новую транзакцию.
Исключения
InvalidOperationException
| Соединение не открыто или предыдущая транзакция не закончена. | |
ArgumentOutOfRangeException
| Уровень изоляции транзакций не поддерживается. | |
LinterSqlException
| Код завершения СУБД ЛИНТЕР не равен 0 . |
Пример
// C# using System; using System.Data; using System.Data.Common; class BeginTransactionSample { static void Main() { // Создание фабрики классов провайдера DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); // Соединение с БД DbConnection con = factory.CreateConnection(); con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;DataSource=LOCAL"; con.Open(); // Старт транзакции DbTransaction tran = con.BeginTransaction(IsolationLevel.ReadCommitted); // Команде необходимо присвоить объекты транзакции и подключения DbCommand cmd = factory.CreateCommand(); cmd.Connection = con; cmd.Transaction = tran; try { cmd.CommandText = "insert into auto (personid) values (1001)"; cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); // Фиксация транзакции tran.Commit(); Console.WriteLine("В базу данных записаны две строки"); } catch (Exception ex) { Console.WriteLine("Ошибка фиксации транзакции: {0}", ex.GetType()); Console.WriteLine(" Сообщение: {0}", ex.Message); // Откат транзакции try { tran.Rollback(); } catch (Exception ex2) { // Данный блок catch должен обработать любые ошибки, которые могут // произойти при откате транзакции (например, закрытое соединение) Console.WriteLine("Ошибка отката транзакции: {0}", ex2.GetType()); Console.WriteLine(" Сообщение: {0}", ex2.Message); } } // Освобождение ресурсов con.Close(); } }