C# 违反主键约束';PK#u login1';。无法在对象';dbo.login1';
我正在尝试向sql server插入一些数据,但收到错误消息,如“违反主键约束'PK_login1'。无法在对象'dbo.login1'中插入重复键。该语句已终止。“”。我尝试从表中删除主键约束,之后我看到它正在向表中插入两种以上类似的数据。我的代码是C# 违反主键约束';PK#u login1';。无法在对象';dbo.login1';,c#,asp.net,C#,Asp.net,我正在尝试向sql server插入一些数据,但收到错误消息,如“违反主键约束'PK_login1'。无法在对象'dbo.login1'中插入重复键。该语句已终止。“”。我尝试从表中删除主键约束,之后我看到它正在向表中插入两种以上类似的数据。我的代码是 protected void btn_Submit_Click(object sender, EventArgs e) { try { SqlCommand cmd; str = "Insert i
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";
}
}
您必须捕获异常,然后告诉用户电子邮件已经存在。此链接可能会帮助您:约束唯一地标识数据库表中的每条记录 主键必须包含唯一的值 主键列不能包含空值 每个表都应该有一个主键,并且每个表只能有一个主键 插入前 您需要检查数据库中是否存在新的插入值。如果数据库中没有数据,则将新值插入数据库,否则会向用户抛出一条消息“您正在使用的给定输入数据已经存在”
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";
}
}
希望这能解决问题。@COLDTOLD我使用电子邮件地址作为主键,那么在执行插入之前,您必须检查具有相同电子邮件的用户是否已经存在。您的问题是,您插入了具有相同主键的多个数据key@COLDTOLD我想知道为什么一条insert语句一次插入多条记录?请帮帮我您不应该将您的SQL语句连接在一起—这会受到SQL注入攻击。相反:使用参数化查询!你能告诉我为什么insert语句同时插入多条记录吗?嗨,你能再次检查一下这个代码吗?实际上,我无法理解这个代码。什么是“&”选择@标识为int32;在str?和if语句之后,我认为只有一个代码是“lbl_Error.Visible=true;“将执行?是否可以再次编辑此代码?请查看更新的代码。@@IDENTITY将返回上一个标识值。如果没有受影响的行,它将返回null。代码的问题是您使用的ExecuteOnQuery和executescalar将插入记录两次。”。