SSP0055 Ответов: 1

Как откатить изменения в C#?


Я создал веб-приложение с возможностью входа и регистрации в своем проекте колледжа.
И когда пользователь входит в систему, у него есть некоторые полномочия для операций CRUD. Когда он создает из своего авторитета я посылаю уведомление на его электронную почту с некоторой информацией, используя протокол SMTP, это работает нормально.
мой вопрос:
1. но когда что-то идет не так во время сохранения данных в базу данных и отправки электронной почты ему/ей, как я откатываю эти изменения?
2. Как подать заявку на транзакцию для почтового сервиса и создания?
3. я на правильном пути или нет?

Что я уже пробовал:

Из моих исследований я обнаружил, что транзакция используется для отката изменений? (см. мой второй вопрос)
Any Something else is there please tell me.


Спасибо.

1 Ответов

Рейтинг:
0

OriginalGriff

Транзакции довольно просты: вы создаете транзакцию перед внесением каких-либо изменений, а затем либо фиксируете ее, когда все они работают, либо Откатываете, если что-то не удается:

private void DoDB(...)
    {
    string strConnect = SMDBSupport.SMInstanceStorage.GetInstanceConnectionString("Testing");
    using (SqlConnection con = new SqlConnection(strConnect))
        {
        con.Open();
        SqlTransaction transaction = con.BeginTransaction("MyTransaction");
        try
            {
            using (SqlCommand cmd = new SqlCommand("...", con))
                {
                 ...
                cmd.ExecuteNonQuery();
                }
            using (SqlCommand cmd = new SqlCommand("...", con))
                {
                 ...
                cmd.ExecuteNonQuery();
                }
            transaction.Commit();
            }
        catch (Exception ex)
            {
            transaction.Rollback();
            Console.WriteLine(ex.Message);
            }
        }
    }


Maciej Los

5ed!

SSP0055

а как насчет транзакции по электронной почте?

OriginalGriff

Как вы думаете, что такое транзакция электронной почты?

SSP0055

что делать, если база данных сохраняет данные в таблицу и исключение выбрасывается из процесса обработки электронной почты? как бы я справился с этим процессом?
Таким образом, здесь процесс электронной почты зависит от процесса создания...Как я с этим справлюсь?

OriginalGriff

Какой процесс электронной почты?
Если вы поместите фиксацию в конец блока try, любое исключение внутри блока try вызовет откат через блок catch - не имеет значения, что вызвало исключение. Поэтому, если у вас возникли проблемы с электронной почтой, отправьте ее до фиксации, и сбой приведет к откату БД.

MadMyche

Вставьте свой процесс электронной почты немедленно до того, как transaction.Commit; если он не работает, он должен выдать исключение, которое поместит вас в catch{}, таким образом откатывая транзакцию

BillWoodruff

оберните части, которые могут потерпеть неудачу в блоках "Try/Catch", а затем отправьте электронное письмо в блоке "Catch".