无法在对象中插入重复键

时间:2016-05-04 03:35:17

标签: c# sql winforms

我有问题,虽然我检查过数据库中不存在主键。其他信息:

  

其他信息:违反PRIMARY KEY约束   'PK_Yeucaukhachhang'。无法在对象中插入重复键   'dbo.Yeucaukhachhang'。重复键值为(MH01123123)。

using (SqlConnection sqlCon = new SqlConnection(sqlCnt))
{
   for (int i = 0; i < metroGrid2.Rows.Count; i++)
   {
      SqlCommand cmd = new SqlCommand("INSERT INTO
      Yeucaukhachhang(MaKH,MaHang,TenHang,DonViTinh,Dongia,
      SoLuong,Duyet) values('"+ makh.Text+"','"+
      metroGrid2.Rows[i].Cells["mahang"].Value +
      "','"+metroGrid2.Rows[i].Cells["tenhang"].Value+"', '"+ 
      metroGrid2.Rows[i].Cells["donvitinh"].Value+"', '"+ 
      metroGrid2.Rows[i].Cells["dongia"].Value+"', '"+ 
      metroGrid2.Rows[i].Cells["soluong"].Value+"', 'N')", sqlCon);
      SqlCommand cmd1 = new SqlCommand("INSERT INTO DanhMucKhachHang(MaKhachHang,TenKhachHang,DiaChiKhachHang,SDTKhachHang,CMD,masothue,thanhtoan,nganhang,taikhoannganhang,ngaythang,MaHang,TenHang,DonViTinh,Dongia,SoLuong,Duyet) VALUES(@MaKhachHang,@TenKhachHang,@DiaChiKhachHang,@SDTKhachHang,@CMD,@masothue,@thanhtoan,@nganhang,@taikhoannganhang,@ngaythang)", sqlCon);
                 cmd1.Parameters.AddWithValue("@MaKhachHang", makh.Text);
                 cmd1.Parameters.AddWithValue("@TenKhachHang", namekh.Text);
                 cmd1.Parameters.AddWithValue("@DiaChiKhachHang", address.Text);
                 cmd1.Parameters.AddWithValue("@SDTKhachHang", phone.Text);
                 cmd1.Parameters.AddWithValue("@CMD", idkh.Text);
                 cmd1.Parameters.AddWithValue("@masothue", idthue.Text);
                 cmd1.Parameters.AddWithValue("@thanhtoan", deliver.Text);
                 cmd1.Parameters.AddWithValue("@nganhang", bank.Text);
                 cmd1.Parameters.AddWithValue("@taikhoannganhang", idacc.Text);
                 cmd1.Parameters.AddWithValue("@ngaythang", this.datekh.Value);

                 sqlCon.Open();
                 cmd.ExecuteNonQuery();
                 cmd1.ExecuteNonQuery();
                 sqlCon.Close();
                 MessageBox.Show("Thêm thành công, đa chuyển qua xác nhận yêu cầu");
                 LTQL.Home.Home cort = new LTQL.Home.Home();
                 cort.Show();
                 this.Hide();
             }

1 个答案:

答案 0 :(得分:1)

我们无法判断您是否确实存在密钥违规,但我从未见过SQL错误地使该错误发生。

但是,我至少可以在尝试追踪错误时给你一些指示。

首先,我建议你重写代码来构建你的命令:

0&ID_2=&D

如果您不熟悉string.format,请记住的是{}内的数字是指关闭后的参数&#34;

这样就无需仔细检查您是否已将所有内容和订单放在正确的位置和订单中,并在以后再次使用时更轻松地阅读您的代码。

然后,如果您仍有问题,只需将szCommand写入某个地方的文本文件:

string szCommand = "INSERT INTO Yeucaukhachhang(MaKH,MaHang,TenHang,DonViTinh,Dongia,
            SoLuong,Duyet)";
szCommand += string.Format("values ('{0}','{1}','{2}','{3}','{4}','{5}')",
makh.Text, metroGrid2.rows[i].cells["mahang"].Value, 
metroGrid2.Rows[i].Cells["tenhang"].Value,
metroGrid2.Rows[i].Cells["donvitinh"].Value, 
metroGrid2.Rows[i].Cells["dongia"].Value, 
metroGrid2.Rows[i].Cells["soluong"].Value);
SqlCommand cmd = new SqlCommand(szCommand,sqlCon);

这将向您显示传递给命令对象的确切内容。

希望这有帮助。