繁体   English   中英

上传 Datagridview 数据到 MySQL DB

[英]Uploading Datagridview data to MySQL DB

我创建了一个从 CSV 到 datagridview 的简单大量数据上传,并将所有 datagridview 行保存到我的 MySQL 表中,代码运行良好,但是当我检查我的数据库时,它将 null 值插入到我的代码表中。

这是我的按钮,用于从我的 Datagridview 添加所有值

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim cmd As MySqlCommand

        connection.Open()
        Dim i As Integer
        For i = 0 To DataGridView1.Rows.Count - 2

            Dim row As DataGridViewRow = DataGridView1.Rows(i)

            cmd = New MySqlCommand("INSERT INTO tbl_handling(tbl_docnumber,tbl_bpref,tbl_cname) values (@docnumber,@bref,@cname)", connection)

            cmd.Parameters.Add("@docnumber", MySqlDbType.Int64).Value = DataGridView1.Rows(i).Cells(0).Value.ToString
            cmd.Parameters.Add("@bref", MySqlDbType.VarChar).Value = DataGridView1.Rows(i).Cells(1).Value.ToString
            cmd.Parameters.Add("@cname", MySqlDbType.VarChar).Value = DataGridView1.Rows(i).Cells(2).Value.ToString

            cmd.ExecuteNonQuery()
        Next

        connection.Close()
        connection.Dispose()
       
        MessageBox.Show("Data All Uploaded")

    End Sub

这是我将 CSV 文件插入我的 Datagrid 视图的代码

Private Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectData.Click

        Dim fName As String = ""
        OpenFileDialog1.InitialDirectory = "D:\TestFile"
        OpenFileDialog1.Filter = "CSV files(*.csv)|*.csv"
        OpenFileDialog1.RestoreDirectory = True

        Dim colespected As Integer = 5

        Dim sline As String = ""



        If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
            fName = OpenFileDialog1.FileName
            Dim thereader As New StreamReader(fName, Encoding.Default)
            Do
                sline = thereader.ReadLine
                If sline Is Nothing Then Exit Do

                Dim words() As String = sline.Split(",")
                DataGridView1.Rows.Add("")

                For ix As Integer = 0 To 2
                    DataGridView1.Rows(DataGridView1.Rows.Count - 1).Cells(ix).Value = words(ix)
                Next

            Loop
            thereader.Close()
        End If

    End Sub

我假设您的数据在网格中成功显示。 所以我只处理 Button 事件。

命令和连接都需要关闭和处理。 Using...End Using块为您执行此操作。 (顺便说一句, Stream对象也应该在Using块中。)数据库对象应该是使用它们的方法的本地对象。 如果您.Dispose一个连接,您希望以后如何.Open它? 命令和参数集合仅在循环外创建一次。 只是.Value在循环内发生变化。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using connection As New MySqlConnection(ConStr),
            cmd As New MySqlCommand("INSERT INTO tbl_handling(tbl_docnumber,tbl_bpref,tbl_cname) values (@docnumber,@bref,@cname)", connection)
        cmd.Parameters.Add("@docnumber", MySqlDbType.Int64)
        cmd.Parameters.Add("@bref", MySqlDbType.VarChar)
        cmd.Parameters.Add("@cname", MySqlDbType.VarChar)
        connection.Open()
        For i = 0 To DataGridView1.Rows.Count - 2
            cmd.Parameters("@docnumber").Value = CLng(DataGridView1.Rows(i).Cells(0).Value)
            cmd.Parameters("@bref").Value = DataGridView1.Rows(i).Cells(1).Value.ToString
            cmd.Parameters("@cname").Value = DataGridView1.Rows(i).Cells(2).Value.ToString
            cmd.ExecuteNonQuery()
        Next
    End Using
    MessageBox.Show("Data All Uploaded")
End Sub

我有点担心tbl_docnumber是数据库中的自动编号(身份)主键。 如果是这样,则应从Insert中省略此字段。

如果您填充DataTable而不是DataGridView ,此操作会更容易。 然后,您可以使用DataAdapter更新数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM