22 April 2015

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


Bagaimana cara import data dari excel ke database MySQL dengan menggunakan VB.NET?
Bicara tentang import data dari excel dengan database apapunnya, gampang-gampang susah.
Kita bisa bilang gampang kan klo udah tau cara/solusinya hehe...

Catatan penting: yang jadi riskan error adalah validasi data. Bentuk dan isi data excel harus benar-benar sesuai, klo ngga yaaaa error. Lebih lanjut tentang validasi belakangan aja yah.

Rani juga anggap readers udah paham tentang VB.NET & MySQL, jadi tau apa aja yang harus add reference dll. Klo belum baca dulu Tutorial nya yah.

Nah bahasan disini Rani batasi dengan asumsi kondisi data excel valid dan sesuai. Berikut struktur tabel tblKaryawan beserta isinya sebelum proses import.

Atur UI seperti gambar berikut:
TextBox1 digunakan untuk menyimpan path dan nama file excel yang akan digunakan, Button1 untuk browse file, dan Button 2 untuk proses import. ListBox1 untuk menyimpan nama-nama sheet. Label1 keterangan data excel dan Label2 untuk keterangan data MySQL. DataGridView1 untuk menampilkan data tabel dari excel sementara DataGridView2 untuk menampilkan data dari MySQL.

Selesai dengan UI, lanjut ke Code. Pertama Import Class yang digunakan.
Imports System.IO 
Imports System.Data 
Imports System.Data.OleDb 
Imports MySql.Data.MySqlClient

Kemudian deklarasikan object data untuk digunakan di Class frmImportExcel.
Dim conn As New MySqlConnection 
Dim strConn As String = "server=localhost;user id=root;" & _
                        "password=xxxx;database=latihan"
 
Dim tblImport As DataTable

Sub Procedure berikut untuk menampilkan data dari tabel MySQL.
Sub MySQLDataLoad()
    Dim myCommand As New MySqlCommand
   
Dim myAdapter As New MySqlDataAdapter
   
Dim myData As New DataTable
   
Dim SQL As String

    Try
        conn.Open()
        SQL = "Select nik, nama From tblkaryawan"

        myCommand.Connection = conn
        myCommand.CommandText = SQL

        myAdapter.SelectCommand = myCommand
        myAdapter.Fill(myData)

        DataGridView2.DataSource = myData

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


Sub procedure di atas akan dipanggil di event Form_Load. Event ini juga memuat pengaturan connection string dan beberapa pengaturan property UI.
Private Sub frmImportExcel_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load

    TextBox1.ReadOnly = True
    Button1.Text = "Browse..."
    Button2.Enabled = False
    Button2.Text = "Import"
    Label1.Text = "Data Excel"
    Label2.Text = "Data MySQL"

    With DataGridView1
        .AllowUserToDeleteRows = False
        .AllowUserToAddRows = False
        .ReadOnly = True
    End With

    With DataGridView2
        .AllowUserToDeleteRows = False
        .AllowUserToAddRows = False
        .ReadOnly = True
    End With

    conn.ConnectionString = strConn
    MySQLDataLoad()

  End Sub

Kemudian kita siapkan juga 2 buah procedure untuk menampilkan data excel, termasuk pilihan sheet dan isi tabel. Isi tabel excel akan disimpan dalam object DataTable dengan nama tblImport.
'Untuk menampilkan data sheet di grid
Sub LoadExcel2Grid(ByVal FileName As String, ByVal SheetName As String)
    Dim exConn As OleDbConnection
    Dim dt As DataSet
    Dim cmd As OleDbDataAdapter

    Dim sConn As String
    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
            FileName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

    exConn = New System.Data.OleDb.OleDbConnection(sConn)
    cmd = New System.Data.OleDb.OleDbDataAdapter( _
          "select * from [" & SheetName & "]", exConn)
    cmd.TableMappings.Add("Table", SheetName)
    dt = New System.Data.DataSet
    cmd.Fill(dt)
    tblImport = dt.Tables(0)
    DataGridView1.DataSource = tblImport

    exConn.Close()
End Sub

 'Untuk menampilkan nama sheet di listbox
Sub GetExcelSheetNames(ByVal FileName As String)
    Dim sConn As String
    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
            FileName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

    Dim conn As New OleDbConnection(sConn)

    conn.Open()

    Dim dtSheets As DataTable = _
    conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    Dim drSheet As DataRow

    ListBox1.Items.Clear()
    For Each drSheet In dtSheets.Rows
        ListBox1.Items.Add(drSheet("TABLE_NAME").ToString())
    Next

    LoadExcel2Grid(FileName, ListBox1.Items(0).ToString)

    conn.Close()

 End Sub

Lanjut di Part 2 ...

Click here if you like this article.


0 comments: