Jag kan inte säga hur mycket snabbare detta kommer att gå, men det finns enkla optimeringar för din fråga
Dim queryInsert As String = "INSERT INTO tbl_shipdetails (ship_date, " & _
"item_type, item_code, imei1, imei2)" & _
"VALUES(@p1,'@p2,@p3,@p4,@p5)"
Dim cmd = New MySqlCommand(queryInsert, Myconnect)
cmd.Parameters.Add("@p1", MySqlDbType.VarChar)
cmd.Parameters.Add("@p2", MySqlDbType.VarChar)
cmd.Parameters.Add("@p3", MySqlDbType.VarChar)
cmd.Parameters.Add("@p4", MySqlDbType.VarChar)
cmd.Parameters.Add("@p5", MySqlDbType.VarChar)
For i As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Parameters("@p1").Value = DataGridView1.Rows(i).Cells(1).Value
cmd.Parameters("@p2").Value = DataGridView1.Rows(i).Cells(2).Value
cmd.Parameters("@p3").Value = DataGridView1.Rows(i).Cells(3).Value
cmd.Parameters("@p4").Value = DataGridView1.Rows(i).Cells(4).Value
cmd.Parameters("@p5").Value = DataGridView1.Rows(i).Cells(5).Value
cmd.ExecuteNonQuery()
Next
Genom att använda parametrar kan du bygga MySqlCommand bara en gång utanför loopen och undviker också det arbete som behövs för att sammanfoga strängarna. (För att inte tala om problemet med Sql Injection)
Lägg märke till att jag har följt ditt tips i sql-texten där alla dina fält verkar vara av string(VarChar)-typ. Om dina fält är av olika datatyp bör du justera MySqlDbType enum till din korrekta datatyp (och konvertera indatavärdena=