【问题标题】:Violation of PRIMARY KEY constraint 'PK__tblmembe__DD7012648BA5EC8B' When insert in DataBase *** ASP.Net Query在数据库中插入时违反主键约束“PK__tblmembe__DD7012648BA5EC8B”*** ASP.Net 查询
【发布时间】:2016-11-13 09:57:42
【问题描述】:

我为插入用户创建一个页面。

但是当我运行页面时会显示这个错误

Error Pic

ASP 代码

protected void Page_Load(object sender, EventArgs e)
{
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["shopDBConnectionString"].ConnectionString;
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
    cmd.CommandText = "insert into tblmember values ('" + txtemail.Text + "','" + txtname.Text + "','" + txtfamily.Text + "','" + txtpass.Text + "','','" + DropDownList1.SelectedValue + "') ";
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = con;
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    Response.Redirect("Default.aspx");
}

My DataBase

【问题讨论】:

  • 它清楚地表明您正在将重复值插入主键列。
  • 您是否尝试在数据表的主键列中插入重复条目?
  • 你的表的主键是什么?
  • 没有。哪个重复列?没有重复的列
  • 请将您的查询更改为参数化查询,除非您想将自己暴露在 sql 注入攻击中。

标签: c# asp.net sql-server


【解决方案1】:

您似乎没有在查询中传递主键,因为重复键显示为 Empty ()。电子邮件列 Uid名字让我很困惑)必须是唯一的。不能有两行具有相同的主键。

其次,更重要的是,不要连接输入中的字符串来构建查询。这很容易injected 带有可能会删除您的数据库的有害查询。

查看example,了解如何使用参数化查询。

【讨论】:

  • 我是初学者。我不明白你的意思
  • @Kianoush 我为此提供了链接。
  • 你的意思是我使用了存储过程?
  • @Kianoush 您没有为列 Uid 提供值,这是您的行的标识符。您需要在查询中为Uid 传递一个值或更新您的数据库表并将其设置为由 SQL-Server 自动生成
  • @Kianoush 存储过程,或此链接中的 c# 参数:stackoverflow.com/questions/38285464/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 2018-03-31
相关资源
最近更新 更多