【问题标题】:How to catch non-primary key exception如何捕获非主键异常
【发布时间】: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


【解决方案1】:

最好的办法是编写另一个数据库查询,并检查电子邮件是否已经存在我的朋友。

【讨论】:

  • 我从刚才开始尝试,但我不能。我真的希望你能为我写代码,因为我真的很陌生。
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 2017-03-14
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多