2016-05-04 69 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 delete 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

ありがとう、私はあなたの協定の指示をテストします –

関連する問題