我从c#form
更新sql数据库有很多问题fisrt:我将此代码用于名为" Update"的按钮。直接从文本框获取值并填充主sql server数据库。
SqlConnection cnt = new SqlConnection("Data Source=.;Initial Catalog=db3;Integrated Security=True");
SqlCommand cmd = new SqlCommand("update phone set name=@name,lastname=@lastname,Phone=@Phone,Mobile=@Mobile,Area=@Area,date=@date", cnt);
cnt.Open();
cmd.Parameters.AddWithValue("@name", namebox.Text);
cmd.Parameters.AddWithValue("@lastname", lastbox.Text);
cmd.Parameters.AddWithValue("@Phone", phonebox.Text);
cmd.Parameters.AddWithValue("@Mobile", mobilebox.Text);
cmd.Parameters.AddWithValue("@Area", areabox.Text);
cmd.Parameters.AddWithValue("@date", datestring);
cmd.ExecuteNonQuery();
cnt.Close();
但在移动专栏中出现错误:
Violation of UNIQUE KEY constraint 'UQ__phone__5C7E359EA73D3013'. Cannot insert duplicate key in object 'dbo.phone'. The duplicate key value is (4802615).
注2:我使用此代码进行选择并查看已准备好进行编辑的所选行
1 - 问题解决了SQL列是唯一索引所以我删除了它。
2-没有"其中条件"所以我也解决了这个问题
答案 0 :(得分:2)
未使用Where子句,因此表中的所有行都会更新,因此会生成错误。
答案 1 :(得分:0)
添加“WHERE Phone = @ phone”及其相关参数命令。正如另一个人指出的那样,你正在更新,但你还没有告诉数据库专门关注单个记录,所以你的命令会更新它们。
对于第一条记录来说这很好,一旦它尝试更新第二条记录,就会爆炸,因为手机上有一个唯一的约束,阻止任何其他记录具有相同的数据。那是你的错误信息。
您需要更改update语句以定位要更新的确切记录。
答案 2 :(得分:0)
我认为您应该设置PK或更新电话表中的所有行。 例如:UPDATE tablename SET columName WHERE .... 我希望这会有用