更新SQL并获取错误

时间:2014-12-09 12:52:27

标签: c# sql-server

我从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-没有"其中条件"所以我也解决了这个问题

3 个答案:

答案 0 :(得分:2)

未使用Where子句,因此表中的所有行都会更新,因此会生成错误。

答案 1 :(得分:0)

添加“WHERE Phone = @ phone”及其相关参数命令。正如另一个人指出的那样,你正在更新,但你还没有告诉数据库专门关注单个记录,所以你的命令会更新它们。

对于第一条记录来说这很好,一旦它尝试更新第二条记录,就会爆炸,因为手机上有一个唯一的约束,阻止任何其他记录具有相同的数据。那是你的错误信息。

您需要更改update语句以定位要更新的确切记录。

答案 2 :(得分:0)

我认为您应该设置PK或更新电话表中的所有行。 例如:UPDATE tablename SET columName WHERE .... 我希望这会有用