2

我正在尝试向 sql server 插入一些数据,但收到错误消息,例如“违反主键约束 'PK_login1'。无法在对象 'dbo.login1' 中插入重复键。语句已终止。”。我试图从表中删除主键约束,之后我看到它正在向表中插入两个以上类似的数据。我的代码是

protected void btn_Submit_Click(object sender, EventArgs e)
{
    try
    {
        SqlCommand cmd;
        str = "Insert into login1 values ('" + txtbx_Uname.Text + "', '" + txtbx_Pwd.Text + "', '" + txtbx_Email.Text + "', '" + txtbx_Dob.Text + "', " + txtbx_Phone.Text + ")";
        con.Open();
        cmd = new SqlCommand(str, con);
        cmd.ExecuteNonQuery();
        lbl_Error.Visible = true;
        lbl_Error.Text = "Registration Success";
        int n = Convert.ToInt32(cmd.ExecuteScalar());
        if(n==1)
            Response.Redirect("Login.aspx");
        con.Close();
    }
    catch
    {
        lbl_Error.Visible = true;
        lbl_Error.Text = "SQL Server Error. Pleaase try after sometime";
    }
}
4

3 回答 3

1

您正在使用 cmd.ExecuteNonQuery();int n = Convert.ToInt32(cmd.ExecuteScalar());它会在这里做同样的工作。如果您想要已插入表中的新记录的状态,则将查询更改为存储过程或使用另一个查询来找出具有提到的字段的记录计数。

试试下面的代码。

    protected void btn_Submit_Click(object sender, EventArgs e)
    {
        try
        {
            SqlCommand cmd;
            str = "Insert into login1 values ('" + txtbx_Uname.Text + "', '" + txtbx_Pwd.Text + "', '" + txtbx_Email.Text + "', '" + txtbx_Dob.Text + "', " + txtbx_Phone.Text + ")";
     " _    
    & "SELECT @@IDENTITY AS int32;"
            con.Open();
            cmd = new SqlCommand(str, con);    
      int n = Convert.ToInt32(cmd.ExecuteScalar());  

            if(n==1)
            {
     lbl_Error.Visible = true;
            lbl_Error.Text = "Registration Success";  
                Response.Redirect("Login.aspx");
            con.Close();
           }
     }
        catch
        {
            lbl_Error.Visible = true;
            lbl_Error.Text = "SQL Server Error. Pleaase try after sometime";
        }

}

希望这能解决问题。

于 2013-01-24T05:51:08.687 回答
0

您必须捕获异常,然后告诉用户该电子邮件已经存在。此链接可能会对您有所帮助:违反 PRIMARY KEY 约束

于 2013-01-24T05:24:57.130 回答
0

PRIMARY KEY约束唯一标识数据库表中的每条记录。

主键必须包含唯一值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,每个表只能有一个主键。

插入前

您需要检查数据库中是否存在新的插入值。如果数据库中没有数据,则将新值插入数据库,否则向用户抛出消息“给定输入的数据已经存在”。

于 2013-01-24T05:26:23.307 回答