Реклама:

SqlTransaction t; //объект транзакции

SqlCommand Zapros = new SqlCommand(); //команда данных

//---если текущее соединение закрыто, открыть

if (sqlConnectionl.State == ConnectionState.Closed)

{

sqlConnection1.Open();

}

//---запускаем транзакцию, получаем объект транзакции

t = sqlConnection1.BeginTransaction();

//---команда использует открытое существующее соединение

Zapros.Connection = sqlConnectionl;

//---команда использует транзакцию

Zapros.Transaction = t;

//шаги изменения данных в контексте транзакции try

{

//---увеличение остатка на счете гражданина

Zapros.CommandText =

"UPDATE SCHETA..AccountPerson SET OSTATOK = OSTATOK + 222 " +

"WHERE KODPERSON = '111'"; Zapros.ExecuteNonQuery();

//---уменьшение остатка на счете организации

Zapros.CommandText =

"UPDATE SCHETA..AccountOrg SET OSTATOK = OSTATOK - 222 " +

"WHERE KODORG = '2'";

Zapros.ExecuteNonQuery();

//---раз попали сюда, ошибок не было

MessageBox.Show("Транзакция завершена успешно");

//---можно и подтвердить транзакцию

t.Commit();

}

catch (Exception x)

{

//---сюда попадаем, когда были ошибки; откатываем транзакцию

t.Rollback();

MessageBox.Show(" Ошибка выполнения транзакции: " + x.Message);

}

finally

{

//---сюда попадаем всегда и закрываем соединение

if (sqlConnection1.State == ConnectionState.Open)

{

sqlConnection1.Close();

}

6.3.4.1. Запуск и завершение транзакции

Транзакция начинается методом BeginTransaction объекта соединения. Класс OleDbConnection имеет две сигнатуры метода BeginTransaction:

public OleDbTransaction BeginTransaction();

public OleDbTransaction BeginTransaction( IsolationLevel

isolationLevel );

Класс sqlConnection имеет 4 сигнатуры метода BeginTransaction:

public OleDbTransaction BeginTransaction();

public OleDbTransaction BeginTransaction( IsolationLevel

isolationLevel );

public SqlTransaction BeginTransaction( string transactionName ); public SqlTransaction BeginTransaction( IsolationLevel isolationLevel, string transactionName );

Параметр isolationLevel задает уровень изоляции транзакции как одно из значений перечисления System.Data.IsolationLevel:

Значение

Описание

Chaos

Незавершенные изменения из транзакций с более высоким уровнем изоляции не могут перезаписываться

ReadCommitted

См. выше уровень изоляции ReadCommitted

ReadUncommitted

См. выше уровень изоляции ReadUncommitted

RepeatableRead

См. выше уровень изоляции ReadUncommitted

Serializable

См. выше уровень изоляции Serializable

Unspecified

Уровень изоляции, отличный от приведенных выше и который нельзя определить

Завершение транзакции может состоять в:

• В подтверждении действий, выполненных в контексте транзакции. В этом случае данные переводятся из одного согласованного состояния в другое согласованное состояние.

• В откате транзакции, т. е. отмене всех действий, выполненных в контексте транза-кии. В этом случае данные остаются в том согласованном состоянии, в котором они пребывали на момент старта транзакции.

Подтверждают или откачивают транзакцию методы объекта транзакции (типов SqlTransaction или OleDbTransaction). Метод Commit подтверждает транзакцию:


⇐ Предыдущая страница| |Следующая страница ⇒