2016-05-04 46 views
0

我有问题,虽然我检查数据库中不存在主键。附加信息:不能在对象中插入重复键

附加信息:违反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(); 
      } 
+0

1.检查数据库名称是否正确。 2.编写sql删除makh = MH01123123并重试。 –

+1

为什么使用'cmd1'的参数化查询,而不是'cmd'? –

+0

请发表您的表结构Yeucaukhachhang – tharif

回答

1

这是我们不可能告诉你是否真的有一个键冲突或没有,但我从来没有见过SQL作出这样的错误不正确。

但是,我可以至少给你一些指示,试图追查错误。

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

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); 

如果你不熟悉的String.Format,要记住的是,里面的号码{ }请参考结束后的参数“

这样就不必再仔细检查你是否拥有完全正确的位置和命令,并且让你的代码在返回时更容易阅读到后来。

然后,如果你仍然有问题,只写szCommand到一个文本文件中的某个地方:

using (StreamWriter sw = new StreamWriter(@"C:\temp\log.txt", true)) 
{ 
    sw.WriteLine(szCommand); 
    sw.Close(); 
} 

这将显示您确切地知道,传递给你的命令对象。

希望这会有所帮助。

+0

非常感谢你,我会测试你的指导 –

相关问题