โค้ด VB ปุ่มบันทึก Error ค่ะ ช่วยทีนะคะ

ทำระบบขายสินค้าค่ะ โดยเชื่อมกับฐานข้อมูล MS SQL Server
พอทำปุ่มบันทึกรายการขาย ให้เก็บลงในฐานข้อมูล มันขึ้น Error ว่า
ไม่สามารถเพิ่มข้อมูลได้ เนื่องจาก Violation of PRIMARY KEY constaint 'PK_Sale', Cannot insert duplicate key in object 'dbo.Sale'. The statement has been terminated.

ฐานข้อมูลของตาราง Sale มี sale_no เป็นPK, sale_date, cus_no
และตาราง sale_detail มี มี sale_no เป็นPK (เป็นFKนะคะ), pro_no เป็นPK, amount, sale_price

(ตารางฐานข้อมูลอื่นๆที่เกี่ยวข้อง) ตารางCustomer มี cus_no เป็น PK, cus_name,cus_add,cus_tel
ตารางProduct มี pro_no เป็น PK, pro_name, pro_cost, pro_price, pro_stock, record_date

และนี่ โค้ดคะ

Private Sub Save_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save_Btn.Click
        If Sale_ListView.Items.Count > 0 Then
            If MessageBox.Show("คุณต้องการยืนยันการขายสินค้า ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                Dim sql As String = ""
                Dim SqlParam As SqlParameter

                sql = "INSERT INTO Sale (sale_no, sale_date, cus_no)"
                sql &= "VALUES (@saleno, @saledate, @cusno)"
                _cmd = New SqlCommand(sql, Conn)

                SqlParam = New SqlParameter
                SqlParam.ParameterName = "@saledate"
                SqlParam.SqlDbType = SqlDbType.DateTime
                SqlParam.Value = DateTimePicker1.Value

                _cmd.Parameters.Add(SqlParam)

                _cmd.Parameters.AddWithValue("saleno", Sale_noTextBox.Text)
                _cmd.Parameters.AddWithValue("cusno", Cus_noTextBox.Text)

                Try
                    With Conn
                        If .State = ConnectionState.Open Then .Close()
                        .ConnectionString = strConnection
                        .Open()
                    End With
                    With _cmd
                        .CommandType = CommandType.Text
                        .CommandText = sql
                        .Connection = Conn
                        .ExecuteNonQuery()
                    End With
                Catch ErrProcess As Exception
                    MessageBox.Show("ไม่สามารถเพิ่มข้อมูลได้ เนื่องจาก " & ErrProcess.Message, "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Exit Sub
                End Try

                Dim i As Integer = 0
                For i = 0 To Sale_ListView.Items.Count - 1
                    sql = "INSERT INTO sale_detail (sale_no, pro_no, amount, sale_price)"
                    sql &= " VALUES(" & (Sale_ListView.Items(i).SubItems(0).Text) & ","
                    sql &= (Sale_ListView.Items(i).SubItems(1).Text) & ","
                    sql &= (Sale_ListView.Items(i).SubItems(3).Text) & ","
                    sql &= (Sale_ListView.Items(i).SubItems(4).Text) & ")"

                    With _cmd
                        .CommandType = CommandType.Text
                        .CommandText = sql
                        .Connection = Conn
                        .ExecuteNonQuery()
                    End With

                Next

                MessageBox.Show("บันทึกรายการขายสินค้า เรียบร้อยแล้ว", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Sale_ListView.Clear()
                ClearCustomerData()
                ClearProductData()
                Sale_noTextBox.Text = ""
                Alltotal_Label.Text = "0"

                Sale_noTextBox.Focus()
            End If


        End If
    End Sub

ที่สงสัยคือ เป็นเพราะใส่ sale_no ซ้ำกันรึเปล่าคะ
sale_no ที่จะใส่ลงตาราง Sale นั้น ดึงมาจาก TextBox
ส่วน sale_no ที่จะใส่ลงตาราง sale_detail ที่เป็น FK นั้น ดึงมาจาก ListView ค่ะ

ช่วยแก้ให้ถูกต้องทีนะคะ ติดปุ่มบันทึกนี้มาหลายวันแล้ว ร้อนใจ แล้วก็เครียดมากค่ะ
หรือถ้ามีใครใจดี อยากให้ช่วยเขียนโค้ดปุ่มบันทึก พร้อมตัดStock โดยมี ตารางฐานข้อมูลแบบนี้ให้ทีค่ะ ><
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
p_key ของคุณไม่สามารถซ้ำกันได้ครับ
ต้องไปย้อนดูใน table แล้วล่ะว่ามีข้อมูลในp_key ที่มีค่านี้อยู่ก่อนแล้วหรือเปล่า
อยากรู้ตรงไหน ลอง trace step ดูครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่