Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0

Автоматическое управление транзакциями


Любая операция с базой данных должна выполняться в контексте транзакции. В своих примерах я постоянно использовал метод OleDbConnection.BeginTransaction(), так как предпочитаю всегда явно управлять транзакциями.

IBProvider может управлять транзакциями автоматически. Для конфигурирования этого режима существуют несколько свойств инициализации, которые могут быть заданы в строке подключения:

auto_commit

Допустимые значения: true, false

Значение по умолчанию: false

Включает режим автоматического управления транзакциями. По умолчанию false

auto_commit_level

Допустимые значения: Read Comitted, Repeatable Read, Snapshot

Значение по умолчанию: Repeatable Read

Задает уровень изоляции автоматических транзакций. По умолчанию Repeatable Read. В ADO .Net уровни изоляции транзакций определены в перечислении IsolationLevel



auto_commit_ddl

Значение по умолчанию: 0

Допустимые значения:

0 - Поддержка DDL запросов отключена

1- Выполнять DDL запрос в выделенной транзакции. Игнорируется если установлено свойство auto_commit

2- Выполнять CommitRetaining после DDL запроса. Игнорируется если установлено свойство auto_commit

Определяет режим выполнения DDL запросов

auto_commit_ddl_level

Допустимые значения: Read Comitted, Repeatable Read, Snapshot

Значение по умолчанию: Read Commited

Задает уровень изоляции автоматических транзакций для DDL запросов.

ПРИМЕЧАНИЕDDL запросы (CREATE/ALTER/DROP) позволяют управлять сущностями базы данных: таблицами, триггерами, хранимые процедуры и т.п.

Следующий пример демонстрирует включение режима автоматического управления транзакциями с уровнем изоляции RepeatableRead:

public void AutoCommitSessionTest() { OleDbConnectionStringBuilder builder = ConnectionProvider.GetConnectionStringBuilder(); builder.Add("auto_commit", true); builder.Add("auto_commit_level", Convert.ToInt32(System.Data.IsolationLevel.RepeatableRead));

OleDbConnection con = new OleDbConnection(builder.ToString()); con.Open();

OleDbCommand cmd = new OleDbCommand("select count(*) from employee", con); Assert.IsTrue((int)cmd.ExecuteScalar() > 0);

con.Close(); }



Содержание раздела