无法在对象'dbo.UserInfo'中插入重复键。重复键值为()。该语句已终止

时间:2016-06-11 18:54:31

标签: c# sql asp.net visual-studio-2015

在我的asp网站上,我有一个寄存器表单,可以将数据发送到数据库。当用户输入他的数据后,在提交后会出现一个错误:

  

违反PRIMARY KEY约束'PK__UserInfo__737584F762CC8D9B'。无法在对象'dbo.UserInfo'中插入重复键。重复键值为()。   声明已经终止。

这是代码:`  signup.aspx.cs -

 protected void submit_Click(object sender, EventArgs e)
{
    string name = Request.Form["name"];
    string email = Request.Form["email"];
    string password = Request.Form["password"];
    string fileName = "Database.mdf";
    string sql = "INSERT INTO UserInfo VALUES('" + name + "','" + email + "','" + password + "')";
    MyAdoHelper.DoQuery(fileName,sql);
}

MyAdoHelper.DoQuery -

public static void DoQuery(string fileName, string sql)
{

    SqlConnection conn = ConnectToDb(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.ExecuteNonQuery();
    com.Dispose();
    conn.Close();

}

MyAdoHelper.ConnectToDb -

public static SqlConnection ConnectToDb(string fileName)
{
    string path = HttpContext.Current.Server.MapPath("App_Data/");
    path += fileName;
    //string path = HttpContext.Current.Server.MapPath("App_Data/" + fileName);
    string connString = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Users\User\Documents\Visual Studio 2015\WebSites\WebSite6\App_Data\Database.mdf; Integrated Security = True";
    SqlConnection conn = new SqlConnection(connString);
    return conn;

}

有人能帮助我吗? THX!

4 个答案:

答案 0 :(得分:0)

我不知道您的架构,但我的猜测是您的email变量为空。

看起来您在SQL Server实例中设置了一个唯一的密钥,并且您第二次尝试使用空值填充该列。

尝试在构建查询时通过添加断点来仔细检查每个变量,以确保客户端以与您希望接收的格式相同的格式传递数据。

答案 1 :(得分:0)

根据错误,它指出您尝试在启用主键的列中插入相同的值,这将不允许,因为它只包含唯一值。

所以你可以尝试以下步骤:

检查表架构并确定哪个列是主列“name”和“email”(此处不确定确切的列名称),然后调试哪个值插入多个时间。

您还可以检查用户是否为主键,然后在后端更改代码,就好像该用户已经存在,然后不再插入,否则更新

如果电子邮件是主键,请检查它!

您可以在插入数据之前检查

IF NOT EXISTS(SELECT 1 from tablename where primarycolumn=value)
BEGIN
//insert into this table
END
ELSE
//update it

答案 2 :(得分:0)

我将excel导入文件保存为CSV,但是直到将第一列从ID重命名为其他名称之前,我仍然无法执行该操作,否则该文件为SYLK格式,从而导致此错误。

https://annalear.ca/2010/06/10/why-excel-thinks-your-csv-is-a-sylk/

答案 3 :(得分:0)

我使用的一种骇人听闻的方式就是根本不首先将我的唯一标识符Username用作主键,方法是转到服务器资源管理器->数据连接-> [我的连接字符串]-> [我的表] ],然后删除T-SQL中的“ PRIMARY KEY”。