OnInserted ハンドラーを持つ SqlDataSource があります。ハンドラーは、挿入されたレコードから収集されたデータを含む電子メールを送信します。その ID (出力パラメーター) を含めます。
昨日、ハンドラーから午後 4 時のタイムスタンプを持つメールが送信されました。SQL でコミットされるレコードのタイムスタンプの 20 分前。それが web/sql/exchange サーバー間のマシン時間の違いであると考えている場合...私はすでにそれを除外しています。挿入は、ストアド プロシージャによって実行されます。複数のテーブルにレコードを挿入します。タイムスタンプはすべて午後 4 時 20 分です。
また、メールに不正確な ID が含まれていました。電子メールが送信された時点でコミットされていないレコードと一致します。
問題は、SqlDataSource の OnInserted ハンドラーによって送信された電子メールが、レコードが SQL でコミットされる前に送信された可能性があるということです。
protected void On_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
try
{
//GET THE RECORD ID
String RecordID = String.Empty;
RecordID = e.Command.Parameters["@RecordID"].Value != null ? e.Command.Parameters["@RecordID"].Value.ToString() : String.Empty;
//SEND THE EMAIL
SmtpClient smtp = new SmtpClient("SmtpHere",##);
MailMessage email = new MailMessage();
email.From = new MailAddress("FromAddressHere");
email.To.Add("ToAddressHere")
email.Subject = "Example Email";
email.Body = "The record #" + RecordID + " was just added.";
smtp.Send(email);
smtp = null;
email.Dispose();
//GO TO THE PAGE WITH THE NEW RECORD ID
HttpContext.Current.Response.Redirect("~/Page.aspx?RecordID=" + RecordID, false);
}
catch (Exception ex)
{
//HANDLE EXCEPTION
}
}