как я могу использовать одну транзакцию SQL для нескольких методов?

#c# #sql #transactions

#c# #sql #транзакции

Вопрос:

У меня есть код для добавления нового клиента в мое приложение. допустим, у меня есть метод save_button, в котором у меня есть несколько методов, которые будут проверять введенные данные, затем метод для создания базы данных для клиента, если проверка верна, а затем несколько методов, которые будут запускать некоторые сохраненные процедуры. все они находятся в последовательности. Теперь допустим, что моя проверка завершена и база данных-клон создана.. нет, при выполнении следующего метода моя программа прерывается.. как я могу использовать одну транзакцию, которая начинается с моей save_button и откатывает все обновленные данные, которые я внес в базу данных, если программа прерывается между ними. с тех пор, когда создание базы данных само по себе является транзакцией. когда я пытаюсь использовать первоначально созданную транзакцию при создании базы данных, она выдает исключение

——-{«Оператор CREATE DATABASE не разрешен в транзакции с несколькими операторами. r Оператор nCREATE DATABASE не разрешен в транзакции с несколькими операторами «.}———-

Комментарии:

1. Что это за разновидность SQL? Разрешает ли это вложенные транзакции?

2. @AndyG я не уверен, поддерживает ли он то же самое .. насколько я знаю, это не так. можете ли вы привести пример sql, который поддерживает вложенную транзакцию.

3. Согласно сообщению об ошибке — вы не можете создать базу данных в транзакции. Здесь не совсем ясно, в чем заключается ваш вопрос — если вы все равно хотите знать, как это сделать, простой ответ «вы не можете». Вы можете создавать объекты внутри базы данных в транзакции, но сама база данных должна быть создана за ее пределами. В любом случае, создание базы данных транзакционным способом имеет мало смысла, поскольку откат при сбое тривиален — удалите базу данных.

4. Вы не подтвердили использование SQL; MySQL? SQL Server ..? После того, как вы узнали, вы могли бы выяснить, поддерживает ли он вложенные транзакции. Однако, прочитав немного о них, понимаешь, что они не совсем то, чем кажутся; в том смысле, что откат откатывает всю последовательность. Однако может оказаться возможным использовать их для устранения конкретной ошибки, поскольку оператор CREATE DATABASE может быть изолирован как транзакция, не состоящая из нескольких операторов.

5. Это сообщение об ошибке принадлежит SQL Server, в частности, который не имеет реальной поддержки вложенных транзакций (он просто подделывает их, довольно неубедительно) — но вложенности нет ни здесь, ни там, поскольку он не поддерживает CREATE DATABASE внутри периода транзакции. BEGIN TRANSACTION; CREATE DATABASE Foo; ROLLBACK это кратчайшее воспроизведение. (Я почти уверен, что вся эта история с «несколькими операторами» — отвлекающий маневр — я был бы очень, если не приятно удивлен, если бы кто-нибудь показал мне любой способ ROLLBACK создания базы данных.)