Основы ASP.NET 2.0



         

Использование объекта Command - часть 3


Развитые СУБД (теперь и MS Access) поддерживают транзакции. Транзакция — это последовательность команд, которая выполняется как одно целое. Например, при переводе денег сумма вычитается с одного счета и добавляется к другому. Если произойдет только одна из этих операций, банк или его клиенты понесут потери, поэтому важно, чтобы произошли обе операции либо ни одна не произошла. Если на одном из этапов транзакции допущена ошибка, происходит откат (Rollback), то есть отменяются все ранее сделанные операции и база возвращается к состоянию до начала транзакции. Если все успешно, транзакция подтверждается операцией Commit.

Для поддержки транзакций введен класс SqlTransaction и ему подобные. У объекта Command есть свойство Transaction. Метод BeginTransaction объекта Connection заставляет базу данных перейти в режим транзакции.

Кроме того, необходимо всегда заключать программный код, работающий с базами данных, в блоки try/catch, так как работа часто идет с удаленными серверами и могут происходить самые разные ошибки как в сети, так и при работе самого сервера.

При этом выбрасывается исключение SqlException или OleDbException:

public void RunTransaction(string[] Queries, string myConnectionString) { SqlConnection conn = null; SqlTransaction trans = null; try { conn = new SqlConnection(myConnectionString); conn.Open();

trans = conn.BeginTransaction();

SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.Transaction = trans; foreach (string Query in Queries) { cmd.CommandText = Query; cmd.ExecuteNonQuery(); } trans.Commit(); } catch (SqlException SqlEx) { if (trans != null) { trans.Rollback(); }

throw new Exception("An error occurred while transaction", SqlEx); return; } finally { if (conn != null) { conn.Close(); } } }




Содержание  Назад  Вперед