我使用c#和asp.net,当用户创建新帐户时会输入email和national id作为主键然后如果用户点击(VIRIFY ME)按钮,程序会将此信息存储在sql server中,并发送电子邮件msg对用户,但我的问题是,当用户点击varify me按钮时,它将打印多个(电子邮件已经存在)
protected void Button1_Click2(object sender, EventArgs e)
{
LabelErrorMSG.Text = "";
String email = emailtextbox0.Text.Trim();
String notionalID = textbox_National_ID.Text.Trim();
try
{
if (notionalID != "" && email != "" && counter==1)
{
// insert notional ID and email into database
getdataobj.PageSignUpInsert(notionalID, email);
/////////////////////////////////////////////////////////////////////
conn.Open();
//Generate Verification Code
String code = getdataobj.GetRandomNumber().ToString();
// Set Verification Code in database
SqlCommand comm = new SqlCommand("UPDATE trained SET VerificationCode='" + code + "' where NationalID='" + notionalID + "'", conn);
comm.ExecuteNonQuery();
conn.Close();
//Send Email to the user with Verification Code
SmtpClient smtpClient = new SmtpClient();
MailMessage mailMessage = new MailMessage("saudiasummertraining@gmail.com", email, "", "");
mailMessage.To.Add(new MailAddress(email));
mailMessage.Subject = "Saudia Summer Traning";
mailMessage.Body = code;
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);
Panel1.Visible = true;
}
else
{
LabelErrorMSG.Text = "you must insert national ID and email ";
}
////////////////////////////////////////////////////////////////////
}
catch (SqlException ex)
{
if (ex.Number == 2627)
{
if (ex.Message.Contains("UNIQUE"))
{
///error msg regarding Unique key violation.
LabelErrorMSG.Text = "The email already exist ";
}
if (ex.Message.Contains("PRIMARY"))
{
//error msg regarding Primary key violation.
LabelErrorMSG.Text = "The national ID already exist ";
}
}
}
}
答案 0 :(得分:0)
如果您希望用户可以多次单击验证按钮,则必须只插入一次Emai-Address,因为您将其设置为“唯一”。 在尝试插入电子邮件之前,您可以检查是否已插入电子邮件。这应该可以防止此错误。
答案 1 :(得分:0)
如果用户在执行conn.Open()
后点击“验证我”按钮,则更新过程将继续,然后conn.Close()
将相应执行。
当用户点击多次验证我按钮conn.Open()
将继续执行多次并将更新该过程并且不会执行
conn.Close()
方法,因此会抛出异常。
解决方案是用户点击“验证我”按钮后,只有在用户验证电子邮件时才会再次启用它。