尝试使用参数将datagridview行集合插入数据库时​​出错

时间:2020-02-20 02:20:30

标签: mysql vb.net exception datagridview parameters

我有一个带有datagridview的表单,该表单在使用条形码扫描仪扫描后显示db表中的列,然后应该将显示的数据与来自组合表文本和标签文本的其他信息一起插入到另一个表中,但是我不断出现错误。这是我使用的代码,可以在其他形式上使用,但不适用于这种形式,我无法找出问题所在。

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

这是exception消息,该错误引发ExecuteNonQuery行,并且我所有的datagrid列名都是正确的。这是datagridview,这是我的database table我正在尝试插入的内容。

1 个答案:

答案 0 :(得分:0)

在这种情况下,几乎可以肯定的是bundle#列名。任何包含空格或其他特殊字符的标识符都必须转义。 MySQL标准是使用坟墓,而Microsoft标准是使用括号。我相信MySQL ADO.NET提供程序(连接器/网络)同时支持:

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

或:

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