Похоже, что вы вставляете несколько значений из DataGridView в базу данных, и все они имеют один и тот же InvoiceNo.
Чтобы упростить просмотр того, какой параметр какой, вы можете обратиться к ним с помощью имя параметра.
Чтобы убедиться в правильности типов данных, используйте различные функции Convert
.
Вам потребуется выполнить запрос для каждой строки данные. Нет необходимости очищать параметры, просто измените значение каждого из них.
Таким образом, ваш код в конечном итоге будет выглядеть примерно так:
Dim sql = "INSERT INTO tblInvoiceDetails ([itemno], [ItemName], [Qt], [Price], [Total]) VALUES (@itemno, @ItemName, @Qt, @Price, @Total)"
Using conn As New SqlConnection("your connection string"),
cmd1 As New SqlCommand(sql, conn)
cmd1.Parameters.Add("@InvoiceNo", SqlDbType.Int)
cmd1.Parameters.Add("@itemno", SqlDbType.Int)
'TODO: Use the correct size for the VARCHAR column:
cmd1.Parameters.Add("@ItemName", SqlDbType.VarChar, 128)
cmd1.Parameters.Add("@Qt", SqlDbType.Int)
cmd1.Parameters.Add("@Price", SqlDbType.Money)
cmd1.Parameters.Add("@Total", SqlDbType.Money)
cmd1.Parameters("@InvoiceNo").Value = Convert.ToInt32(NumericUpDown1.Value)
conn.Open()
For x As Integer = 0 To DataGridView2.RowCount - 1
cmd1.Parameters("@itemno").Value = Convert.ToInt32(DataGridView2.Rows(x).Cells(0).Value)
cmd1.Parameters("@ItemName").Value = Convert.ToString(DataGridView2.Rows(x).Cells(1).Value)
cmd1.Parameters("@Qt").Value = Convert.ToInt32(DataGridView2.Rows(x).Cells(2).Value)
cmd1.Parameters("@Price").Value = Convert.ToDecimal(DataGridView2.Rows(x).Cells(3).Value)
cmd1.Parameters("@Total").Value = Convert.ToDecimal(DataGridView2.Rows(x).Cells(4).Value)
cmd1.ExecuteNonQuery()
Next
End Using
Using Statement заботится об очистке неуправляемых ресурсов, используемых SqlConnection и SqlCommand.
Если у вас есть строковый параметр (в данном случае @ItemName), лучше всего указать размер столбца в базе данных. Я угадал 128, но вы должны ввести фактическое значение.
Кроме того, вы действительно должны дать значимым именам элементов управления, например, «InvoiceNoSelector» вместо «NumericUpDown1».