Commit
Метод подтверждает текущую транзакцию и завершает её. Используемые ресурсы не освобождаются.
Синтаксис
public abstract void Commit();
Возвращаемое значение
Значение типа void.
Исключения
InvalidOperationException | Транзакция уже завершена (подтверждена/отменена/соединение закрыто). | |
LinterSqlException | Код завершения СУБД ЛИНТЕР не равен 0 . |
Пример
// C# using System; using System.Data; using System.Data.Common; class CommitSample { static void Main() { // В примере инициируется транзакция и в таблицу auto добавляются две записи с // одинаковым значением столбца personid // Если столбец personid не является первичным ключом, запись с дубликатом // значения добавляется и транзакция завершается успешно. // Если personid является первичным ключом, то вторая запись нарушает // целостность БД и транзакция отменяется DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); DbConnection con = factory.CreateConnection(); con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"; con.Open(); DbCommand cmd = factory.CreateCommand(); cmd.Connection = con; // Проверяем кол-во строк в таблице auto перед началом транзакции cmd.CommandText = "SELECT COUNT(*) FROM auto"; int AutoCount = int.Parse(cmd.ExecuteScalar().ToString()); // отображаем кол-во строк в таблице auto Console.WriteLine("Кол-во строк в таблице AUTO = " + AutoCount); // Начинаем транзакцию DbTransaction txn = con.BeginTransaction(IsolationLevel.ReadCommitted); cmd.Transaction = txn; try { // Добавляем дважды одну и ту же строку cmd.CommandText = "INSERT INTO auto(personid) VALUES (2000)"; cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); // При добавлении дубликата возможно исключение txn.Commit(); } catch (Exception e) { // Печать диагностического сообщения Console.WriteLine("Ошибка добавления записи = " + e.Message); // Отмена транзакции txn.Rollback(); } // Проверяем кол-во строк в таблице auto после завершения транзакции cmd.CommandText = "SELECT COUNT(*) FROM auto"; AutoCount = int.Parse(cmd.ExecuteScalar().ToString()); // Отображаем полученное кол-во строк // Если столбец personid является первичным ключом, кол-во строк не должно // измениться, в противном случае должно увеличиться на 2 Console.WriteLine("Кол-во строк в таблице AUTO = " + AutoCount); txn.Dispose(); cmd.Dispose(); con.Close(); con.Dispose(); } } Результат выполнения примера: Кол-во строк в таблице AUTO = 1001 Ошибка добавления записи = [Linter error] duplicate value for primary or unique key Кол-во строк в таблице AUTO = 1001