在我的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!
答案 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”。