简体   繁体   中英

Uploading Datagridview data to MySQL DB

i created a simple mass upload of data from CSV to datagridview and save all datagridview rows into my MySQL table, the code works perfectly but when i check my database it insert a null values to my table heres my code.

This is my Button for Adding all values from my 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

This is my code on inserting CSV file to my Datagrid view

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

I am assuming that your data is displaying successfully in the grid. So I am only addressing the Button event.

Both commands and connections need to be closed and disposed. Using...End Using blocks do this for you. (BTW Stream objects should be in Using blocks also.) Database objects should be local to the method where they are used. If you .Dispose a connection how do you expect to .Open it later? The command and parameters collection are only created once outside the loop. Just the .Value changes inside the loop.

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

I am a bit worried that tbl_docnumber is an auto-number (identity) primary key in the database. If this is so, then this field should be omitted from the Insert .

This operation would be easier if you filled a DataTable instead of a DataGridView . You could then use a DataAdapter to update the database.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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