【发布时间】:2014-02-04 13:45:28
【问题描述】:
我现在面临的问题是当用户输入同一封电子邮件时,它仍然会注册会员。我不希望我的电子邮件被设置为主键。如果有人在 try/catch 语句下输入相同的电子邮件,我是否可以停止该过程?
public string registerMember()
{
string status = "";
string ConnString = Properties.Settings.Default.ConnectionString;
string sql = "INSERT INTO Member (userName,Email,Gender,DateOfBirth,Nationality) VALUES(@name, @email, @gender, @dateOfBirth, @nationality)";
using (SqlConnection cn = new SqlConnection(ConnString))
{
SqlCommand cmd = new SqlCommand((sql), cn);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@gender", gender);
cmd.Parameters.AddWithValue("@dateOfBirth", dateOfBirth);
cmd.Parameters.AddWithValue("@nationality", nationality);
try
{
cn.Open();
cmd.ExecuteNonQuery();
status = "Member have been registered successfully!";
}
catch (Exception ex)
{
status = ex.Message;
throw;
}
finally
{
cmd.Dispose();
}
}
return status;
}
【问题讨论】:
-
只需在您的电子邮件列上添加唯一索引
-
您可以这样做,但在
try catch()中不行。如果已经有一封电子邮件,您可以先通过数据库进行验证,请停止您的流程,否则您INSERT -
是的,这就是我的意思!你可以给我演示代码吗,因为我是这里的初学者。 :(
-
请问您为什么在“finally”块中显示成功插入记录的消息? 'finally' 块在后继失败后执行,所以这不是它的地方。只有读到'try'块的结尾,你才知道你已经成功了,所以这应该是你指定成功的地方。
-
无论如何,您都不应该在命令上调用 Dispose。你已经有了一个“使用”块,所以用它来创建和销毁命令以及连接。
标签: c# exception-handling try-catch primary-key