Ошибка при попытке вставить коллекцию строк таблицы данных в базу данных с использованием параметров - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть форма с сеткой данных, которая отображает столбцы из таблицы БД после сканирования с использованием сканера штрих-кода, затем предполагается, что отображаемые данные должны быть вставлены в другую таблицу с дополнительной информацией из формы, такой как текст в выпадающем списке и текст метки, но я продолжал получать ошибку. Это код, который я использую, он работает с другими формами, но не с этой, и я не могу выяснить, в чем дело.

Sub SewingReport()
    Try

        Dim sdate As String = Now.ToString("yyyy-MM-dd")

        If MsgBox("Are you sure you want to save this record to Sewing Report?", vbYesNo + vbQuestion) = vbYes Then
            cn.Open()
            cm = Nothing
            cm = New MySqlCommand("insert into tblsewingreport (tsnumber, bundle#, itemcode, operation, color, size, quantity, price, amount, sdate, employee) values(@tsnumber, @bundle#, @itemcode, @operation, @color, @size, @quantity, @price, @amount, @sdate, @employee)", cn)

            For i = 0 To dgvRecord.Rows.Count - 1
                cm.Parameters.Clear()
                cn.Close()
                cn.Open()
                cm.Parameters.AddWithValue("@tsnumber", lblInvoice.Text)
                cm.Parameters.AddWithValue("@bundle#", dgvRecord.Rows(i).Cells("Column6").Value.ToString)
                cm.Parameters.AddWithValue("@itemcode", dgvRecord.Rows(i).Cells("Column4").Value.ToString)
                cm.Parameters.AddWithValue("@operation", dgvRecord.Rows(i).Cells("Column5").Value.ToString)
                cm.Parameters.AddWithValue("@color", dgvRecord.Rows(i).Cells("Column7").Value.ToString)
                cm.Parameters.AddWithValue("@size", dgvRecord.Rows(i).Cells("Column8").Value.ToString)
                cm.Parameters.AddWithValue("@quantity", CDec(dgvRecord.Rows(i).Cells("Column9").Value.ToString))
                cm.Parameters.AddWithValue("@price", CDec(dgvRecord.Rows(i).Cells("Column10").Value.ToString))
                cm.Parameters.AddWithValue("@amount", CDec(dgvRecord.Rows(i).Cells("Column11").Value.ToString))
                cm.Parameters.AddWithValue("@sdate", sdate)
                cm.Parameters.AddWithValue("@employee", ComboBox1.Text)
                cm.ExecuteNonQuery()

                cn.Close()
            Next
            MinusStockQty()

            MsgBox("Record has been successfully saved to Sewing Report.", vbInformation)
            lblInvoice.Text = GetInvoiceNo()
            txtSearch.Clear()
            txtSearch.Focus()


        End If

    Catch ex As Exception
        cn.Close()
        MsgBox(ex.ToString)
    End Try
End Sub

Это сообщение исключение , ошибка выбрасывает строку ExecuteNonQuery и все мои имена столбцов таблицы данных являются правильными. Это datagridview , и это моя таблица базы данных , которую я пытаюсь вставить в.

1 Ответ

0 голосов
/ 20 февраля 2020

Специфической проблемой c в этом случае почти наверняка является имя столбца bundle#. Любые идентификаторы, которые содержат пробелы или другие специальные символы, должны быть экранированы. Стандарт MySQL для этого - использование могил, а стандарт Microsoft - использование скобок. Я считаю, что провайдер MySQL ADO. NET (Connector /Net) поддерживает оба типа:

cm = New MySqlCommand("insert into tblsewingreport (tsnumber, `bundle#`, itemcode, ...

или:

cm = New MySqlCommand("insert into tblsewingreport (tsnumber, [bundle#], itemcode, ...
...