|
Точки сохранения в транзакциях SQL Server
При внесении множественных изменений в базу данных SQL Server может возникнуть ситуация, когда предпочтительнее отклонить не всю транзакцию, а только ее
часть. Текущие версии SQL Server не поддерживают вложенные транзакции, однако в
них реализована концепция точек сохранения, с помощью которой можно осуществить подобную функциональность. Точка сохранения — это средство SQL Server, позволяющее производить частичное отклонение транзакции. Другими словами, точка
сохранения представляет собой "закладку", определяемую посредством вызова метода
Save класса SqlTransaction в любом месте транзакции, в которое вы хотели бы
вернуться в случае ее отклонения (без отмены всей транзакции).
// Открытие соединения.
SqlConnection conn = new SqlConnection(
"Server-localhost;" +
"Database=ADQNET;" +
"Integrated Security=true;"};
conn.Open();
// Создание команды.
SqlCoitimand cmd = conn.CreateCornmanci () ;
// Создание транзакции,
cmd.Transaction =
conn.BeginTransaction(IsolationLevel.ReadCommitted);
try
// Попытка добавить в базу данных сведения о новом клиенте.
crad.CommandText = "INSERT INTO Customer " +
"(CustomerlD, LastName, FirstName, Phone, Zip) " +
"VALUES {newidO/ 'Smoltz', 'John'," +
"'503-432-4565', '12345');";
cmd.ExecuteNonQuery();
// Создание точки сохранения.
cmd.Transaction.Save("New Customer");
try
(
// Попытка добавить в базу данных сведения о новом счете.
cmd.CommandText = "INSERT INTO Invoice " +
"(InvoicelD, invoiceNumber, InvoiceDate, Terms) " +
"VALUES (newidi), '123456', '05/01/2001',"+
"'Net 20'};";
cmd.ExecuteNonQuery();
}
catch(Exception)
{
// Отклонить транзакцию то точки сохранения -
// момента внесения в базу данных информации о
// новом клиенте.
cmd.Transaction.Rollback("New Customer");
// Если выполнение было передано этому оператору,
// принять транзакцию.
cnid.Transaction. Commit {} ;
}
catch{Exception ex)
t
cmd.Transaction.Rollback( );
Console.WriteLine("Command failed:" +
"{0}\nTransaction Rolled back", ex.Message);
}
|
"(InvoicelD, invoiceNumber, InvoiceDate, Terms) " +
"VALUES (newidi), '123456', '05/01/2001',"+
"'Net 20'};";
cmd.ExecuteNonQuery();
}
catch(Exception)
{
// Отклонить транзакцию то точки сохранения -
// момента внесения в базу данных информации о
// новом клиенте.
cmd.Transaction.Rollback("New Customer");
// Если выполнение было передано этому оператору,
// принять транзакцию.
cnid.Transaction. Commit {} ;
}
catch{Exception ex)
t
cmd.Transaction.Rollback( );
Console.WriteLine("Command failed:" +
"{0}\nTransaction Rolled back", ex.Message);
}
В этом коде мы создали точку сохранения с именем "New Customer" (Новый клиент). Если занесение в базу данных информации о новом клиенте прошло успешно,
однако во время создания нового счета произошла ошибка, нам не хотелось бы терять
уже внесенные в базу данных сведения о новом клиенте. Поэтому мы отклоняем
транзакцию вплоть до точки сохранения и затем принимаем ее.
Предыдущая стр.   
Оглавление   
Средняя оценка:     (1 - 1 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
|
|