2016-05-04 78 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

非常感謝你,我會測試你的指導 –

相關問題