nyt1972 Ответов: 1

[Resolved] хранить строки из datagridview в таблицу mysql, вызывающую ошибку


Дорогой прикрепленный мой проект я хотел сохранить строки из datagridview в таблицу mysql, но я столкнулся с ошибкой в изображении любезно помогите мне.
http://ansicollege.net/vbcode/error.png[^]

Это ошибка, которую я получаю.

Ниже приведена строка кода, в которой я получаю ошибку
dgvcc = DirectCast(DataGridView1.Rows(i).Cells(1), DataGridViewComboBoxCell)
.Parameters.AddWithValue("@product", dgvcc.Value)

Я хранения значений в выпадающем списке элемента управления datagridview, product_id тип данных в базе данных имеет тип int


Вот мой проект http://ansicollege.net/vbcode/TsoftPOS.zip[^]

Что я уже пробовал:

Public Sub CreateBill()
        Dim sql2 As String
        Try
            ConnDB()


            Dim dgvcc As New DataGridViewComboBoxCell

            For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1

                sqL = "INSERT INTO `dailysale`(`billno`,`customer_id`, `product_id`, `qty`, `price`, `total`, `description`) VALUES(@billno,@custid,@product, @qty, @price, @total, @desc)"
                cmd = New MySqlCommand(sqL, conn)
                'datatype integer
                With cmd
                    '   .Parameters.Clear()
                    .Parameters.AddWithValue("@billno", txtbillno.Text)
                    .Parameters.AddWithValue("@custid", txtCustomer.Tag)
                    dgvcc = DirectCast(DataGridView1.Rows(i).Cells(1), DataGridViewComboBoxCell)
                    .Parameters.AddWithValue("@product", dgvcc.Value)
                    .Parameters.AddWithValue("@qty", Me.DataGridView1.Rows(i).Cells(2).Value)
                    .Parameters.AddWithValue("@price", Me.DataGridView1.Rows(i).Cells(3).Value)
                    .Parameters.AddWithValue("@total", Me.DataGridView1.Rows(i).Cells(4).Value)
                    .Parameters.AddWithValue("@desc", Me.DataGridView1.Rows(i).Cells(5).Value)
                End With
  '              cmd = New MySqlCommand(sqL, conn)
                cmd.ExecuteNonQuery()
            Next
            sql2 = "INSERT INTO customer_payments(customer_id, billno, cdate, bill_amount, paid_amount, discount, ret_amount, balance) VALUES ('" & txtCustomer.Tag & "','" & txtbillno.Text & "','" & DateTimePicker1.Value & "','" & txtbill_amount.Text & "','" & txtpaid_amount.Text & "','" & txtdiscount.Text & "','" & txtret_amount.Text & "','" & txttotalbalance.Text & "')"
            cmd = New MySqlCommand(sqL, conn)
            cmd.ExecuteNonQuery()
            MsgBox("New Bill successfully created.", MsgBoxStyle.Information, "Create Bill")
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            cmd.Dispose()
            conn.Close()
        End Try

NotPolitcallyCorrect

И что же? Какую часть сообщения об ошибке вы не понимаете? Независимо от того, как сильно вы пытаетесь избежать изучения новых вещей, вы просто должны научиться использовать отладчик для отладки вашего кода.

CHill60

Почему вы правильно используете параметризованный запрос для sql а затем подвергните свою базу данных SQL-инъекции с помощью sql2?
Ошибка вполне понятна - для одного из значений I в нем ничего нет. DataGridView1.Rows(i).Cells(1) Это, наверное, последний ряд - у вас есть DataGridView1.AllowUserToAddRows установить значение false?

1 Ответов

Рейтинг:
1

RickZeeland

Как говорится в сообщении об ошибке 'product_id'не может быть null, в зависимости от того, как определена ваша таблица, вам придется либо указать для нее значение, либо DEFAULT.
Видеть: MySQL :: MySQL 5.7 справочное руководство :: 13.2.5 синтаксис вставки[^]
Вам, вероятно, понадобится еще один бросок к типу 'product_id' в:

dgvcc.Value


nyt1972

Product_id имеет значение, и в отладке он также показывает мне значение в переменной, но даже тогда он дает мне эту ошибку.

RickZeeland

Тогда, возможно, пришло время использовать другую базу данных, могу ли я предложить PostgreSQL в сочетании с NpgSql :)

nyt1972

Большое спасибо за ваши ответы, наконец-то мне удалось исправить ошибку, обнаружив в debug, что ошибка происходит из-за последней пустой строки в datagridview.