2

SQL サーバーにデータを挿入しようとしていますが、「PRIMARY KEY 制約 'PK_login1' の違反。オブジェクト 'dbo.login1' に重複したキーを挿入できません。ステートメントは終了しました。」のようなエラー メッセージが表示されます。テーブルから主キー制約を削除しようとしましたが、その後、2 つ以上の同様の種類のデータがテーブルに挿入されていることがわかりました。私のコードは

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();and を使用 しています。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

例外をキャッチしてから、メールがすでに存在することをユーザーに通知する必要があります。このリンクはあなたを助けるかもしれません:主キー制約の違反

于 2013-01-24T05:24:57.130 に答える
0

PRIMARY KEY制約は、データベーステーブル内の各レコードを一意に識別します。

主キーには一意の値が含まれている必要があります。

主キー列にNULL値を含めることはできません。

各テーブルには主キーが必要であり、各テーブルには1つの主キーしか持てません。

挿入前

新しい挿入値がデータベースに存在するかどうかを確認する必要があります。データベースにデータがない場合は、新しい値をデータベースに挿入します。そうでない場合は、ユーザーに「指定された入力のデータはすでに存在します」というメッセージをスローします。

于 2013-01-24T05:26:23.307 に答える