22 April 2015

VB.NET MySQL: Import Data dari Excel - Part 2


Next next... artikel ini lanjutan dari Part 1

Untuk mencari file (browse) kita menggunakan event Button1_Click, jika file excel terpilih maka secara otomatis data di sheet pertama akan tampil di grid.
Private Sub Button1_Click(ByVal sender As System.Object, _
   
ByVal e As System.EventArgs) Handles Button1.Click

    With OpenFileDialog1
        .FileName = String.Empty
        .InitialDirectory = "C:\"
        .Title = "Open Excel File"
        .Filter = "Excel 97-2003|*.xls|Excel 2007|*.xlsx"
    End With
    

    Dim result As DialogResult = OpenFileDialog1.ShowDialog()
    If result = Windows.Forms.DialogResult.OK Then
        Try
            TextBox1.Text = OpenFileDialog1.FileName
            GetExcelSheetNames(TextBox1.Text)
        Catch ex As Exception
            MsgBox("Error : " & ex.Message)
        End Try
    End If
 

End Sub

Kita juga akan memanggil procedure untuk menampilkan data di grid setiap pilihan sheet di ListBox1 berubah.
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    LoadExcel2Grid(TextBox1.Text, ListBox1.SelectedItem.ToString)
End Sub


Event TextBox1_TextChanged menjadi parameter perubahan file excel terpilih, jika terdapat file excel yang terpilih maka Button2 akan aktif.
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Button2.Enabled = (Len(TextBox1.Text) > 0)
End Sub

Sub Procedure DoInsert kita buat untuk proses insert data, query yang digunakan di contoh ini adalah insert ignore. Query ini akan mengabaikan proses insert jika input dengan primary key yang sama sudah ada.
Sub DoInsert(ByVal strNIK As String, ByVal strNama As String)
    Dim myCommand As New MySqlCommand
    Dim myAdapter As New MySqlDataAdapter
    Dim myData As New DataTable
    Dim SQL As String

    Try
        If conn.State = ConnectionState.Closed Then conn.Open()

        SQL = "INSERT IGNORE INTO tblKaryawan (nik, nama) VALUES " & _
              "('" & strNIK & "', '" & strNama & "')"

        myCommand.Connection = conn
        myCommand.CommandText = SQL
        myCommand.ExecuteNonQuery()

        MsgBox("Data baru tersimpan")

        conn.Close()
    Catch myerror As MySqlException
        MessageBox.Show("Error: " & myerror.Message)
    Finally
        conn.Dispose()
    End Try
End Sub

Event Button2_Click akan menjalankan proses migrasi, insert data akan diambil dari tblImport.
Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click

    For i As Integer = 0 To tblImport.Rows.Count - 1
        DoInsert(tblImport.Rows(i).Item(0).ToString, _
                 tblImport.Rows(i).Item(1).ToString)
    Next
    MsgBox("Proses Import Selesai!")
    MySQLDataLoad()

End Sub

Oke selesai dengan code, mari kita coba run.
Data MySQL akan ditampilkan saat form pertama kali dipanggil, klik tombol Browse... untuk memilih file excel.

Pilih file excel kemudian klik Open.
Pilihan sheet akan ditampilkan di ListBox dan Data Excel dari sheet terpilih ditampilkan di grid. Klik tombol Import untuk memulai proses import.
Ketika proses import selesai, maka akan muncul pesan konfirmasi:
Hasil yang telah di import pun ditampilkan di grid Data MySQL

Dan ini isi tabel di MySQL setelah proses import.

Kode selengkapnya di Part 3 yah.



Click here if you like this article.


2 comments:

fitro aidil said...

selamat sore bu rani, udah coba untuk tutorial ini dan berhasil,,
saya mau tanya, kalau untuk memasukkan tanggal sebagai header di excel lalu di import ke database caranya gimana ya buk..?

Ghifary Maulana Fanony said...

Bu rani, kenapa script saya saat do insert kode " For i As Integer = 0 To tblImport.Rows.Count - 1" itu salah?

For i As Integer = 0 To tblImport.Rows.Count - 1
DoInsert(tblImport.Rows(i).Item(0).ToString, _
tblImport.Rows(i).Item(1).ToString, _
tblImport.Rows(i).Item(2).ToString, _
tblImport.Rows(i).Item(3).ToString, _
tblImport.Rows(i).Item(4).ToString, _
tblImport.Rows(i).Item(5).ToString, _
tblImport.Rows(i).Item(6).ToString, _
tblImport.Rows(i).Item(7).ToString, _
tblImport.Rows(i).Item(8).ToString, _
tblImport.Rows(i).Item(9).ToString)
Next
itu kode saya