При внесении множественных изменений в базу данных SQL Server может возникнуть ситуация, когда предпочтительнее отклонить не всю транзакцию, а только ее
часть. Текущие версии SQL Server не поддерживают вложенные транзакции, однако в
них реализована концепция точек сохранения, с помощью которой можно осуществить подобную функциональность. Точка сохранения — это средство SQL Server, позволяющее производить частичное отклонение транзакции. Другими словами, точка
сохранения представляет собой "закладку", определяемую посредством вызова метода
Save класса SqlTransaction в любом месте транзакции, в которое вы хотели бы
вернуться в случае ее отклонения (без отмены всей транзакции).
"(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" (Новый клиент). Если занесение в базу данных информации о новом клиенте прошло успешно,
однако во время создания нового счета произошла ошибка, нам не хотелось бы терять
уже внесенные в базу данных сведения о новом клиенте. Поэтому мы отклоняем
транзакцию вплоть до точки сохранения и затем принимаем ее.
Точки сохранения в транзакциях 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" (Новый клиент). Если занесение в базу данных информации о новом клиенте прошло успешно,
однако во время создания нового счета произошла ошибка, нам не хотелось бы терять
уже внесенные в базу данных сведения о новом клиенте. Поэтому мы отклоняем
транзакцию вплоть до точки сохранения и затем принимаем ее.
Основы работы с Microsoft ADO.NET
База грузовых таможенных деклараций
Доступна база грузовых таможенных деклараций.
www.rusconsult.com
Использование поставщика данных .NET
Метео
Войти
Голосование
Идеальный вариант проведения новогодней корпоративной вечеринки - это…
Сейчас на сайте
Сейчас 7 гостей онлайн


