我寫了一個代碼來恢復我的網站passwrod。用戶輸入他的電子郵件地址,我們給他發送一個新的密碼。另外,我們還將他的密碼更改爲最新的密碼。C#回滾sendemail
問題: 如果發送郵件的代碼失敗,我不能在數據庫中更改他的密碼,並且如果密碼更改失敗,我不能發送郵件。
請看:
public bool RecoverPassword(string email)
{
try
{
SceLoginMail sceEmail = new SceLoginMail(email, "Recuperação de senha", 5);
ChangeUserPassword(sceEmail.NovaSenha, email);
sceEmail.SendEmail();
sceUsers.CommitOrRollBack(true);
return true;
}
catch (Exception ex)
{
sceUsers.CommitOrRollBack(false);
return false;
}
}
我嘗試在DB回滾如果SendEmail method.But出現異常,我不能「回滾」 sendmail的方法,如果一個例外CommitOrRollback method.If拋出如此,系統將發送郵件並且不會在數據庫上進行更改。
任何意識?
將這些「新」密碼保存在臨時密碼錶中。在用戶使用臨時密碼登錄之前,請勿更換舊密碼。 – 2010-08-30 20:15:41
我想這是最好的解決方案 – ozsenegal 2010-08-30 20:27:33
[offtopic]這是你得到的一個醜陋的API。在得到'sceUsers.CommitOrRollBack(true);'的意思之前,我必須多次閱讀它。你最好將這個方法分成兩個單獨的方法,名爲'Commit()'和'Rollback()'。如果你不擁有'SceLoginMail'類,你至少可以使用兩種擴展方法。[/ offtopic] – Steven 2010-08-30 21:02:56