Upload image dengan metode menyimpan gambar ke dalam format BLOB MySQL akan sangat efektif untuk aplikasi yang hanya membutuhkan beberapa image untuk diimplementasikan dalam report. Baik, langsung saja, ikuti langkah-langkahnya sebagai berikut :
1. Siapkan form di VB.NET lalu tambahkan textbox (name: txtIDGambar), PictureBox (name: imgLogoInstansi, sizeMode: StretchImage), Button (name: cmdBrowse, text: Browse…), OpenFileDialog (name: openFileDialog1), Button (name: cmdSimpan, text: Simpan), Button (name: cmdUpdate, text: Update). Letak dan posisi silahkan diatur sesuai dengan kebutuhan.
2. Siapkan satu database dengan nama apa saja, dan tambahkan tabel dengan nama tbl_gambar, struktur tabelnya adalah id_gambar (int(3), auto increment), gambar (blob)
3. Lalu bermainlah di area kerja VB.NET, pertama imports referensi
1 2 |
Imports MySql.Data.MySqlClient Imports System.IO |
4. Browse image dari komputer lokal
1 2 3 4 5 6 7 8 9 |
Private Sub cmdBrowse_Click(sender As Object, e As EventArgs) Handles cmdBrowse.Click Dim OpenFileDialog1 As New OpenFileDialog OpenFileDialog1.Filter = "Picture Files (*)|*.bmp;*.gif;*.jpg" If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName) End If End Sub |
5. Simpan gambar ke database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub cmdSimpan_Click(sender As Object, e As EventArgs) Handles cmdSimpan.Click Dim ms As New MemoryStream Try If conn.State = ConnectionState.Closed Then conn.Open() cmd = New MySqlCommand("INSERT INTO tbl_gambar(gambar) VALUES(@picture)", conn) imgLogoInstansi.Image.Save(ms, imgLogoInstansi.Image.RawFormat) Dim data As Byte() = ms.GetBuffer() Dim p As New MySqlParameter("@picture", MySqlDbType.Blob) p.Value = data cmd.Parameters.Add(p) cmd.ExecuteNonQuery() MsgBox("Sukses tersimpan") conn.Close() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Kesalahan") End Try End Sub |
6. Update gambar ke database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Private Sub cmdUpdate_Click(sender As Object, e As EventArgs) Handles cmdUpdate.Click Dim ms As New MemoryStream Try If conn.State = ConnectionState.Closed Then conn.Open() cmd = New MySqlCommand("UPDATE tbl_gambar SET gambar=@picture WHERE id_gambar=@id_gambar", conn) imgLogoInstansi.Image.Save(ms, imgLogoInstansi.Image.RawFormat) Dim data As Byte() = ms.GetBuffer() Dim p As New MySqlParameter("@picture", MySqlDbType.Blob) p.Value = data cmd.Parameters.Add(p) cmd.ExecuteNonQuery() MsgBox("Sukses terupdate") muatDataOrganisasi() conn.Close() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Kesalahan") End Try End Sub |
7. Tampilkan gambar ke form
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Private Sub muatGambar() Try Dim query As String Dim dataImage As Byte() Dim ms As MemoryStream If conn.State = ConnectionState.Closed Then conn.Open() query = "SELECT * FROM tbl_gambar" cmd = New MySqlCommand(query, conn) reader = cmd.ExecuteReader reader.Read() If reader.HasRows Then txtIDGambar.Text = reader.Item("id_gambar") 'Retrieve Blob Image dataImage = DirectCast(reader.Item("gambar"), Byte()) ms = New MemoryStream(dataImage) PictureBox1.Image = Image.FromStream(ms) Else Exit Sub End If conn.Close() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Kesalahan") End Try End Sub |
gan need help.. bagaimna jika konektor yang di pake Odbc
Halo mas Iven, yang dimaksud adalah menggunakan pendekatan komponen odbc dalam bertransaksi dengan database ya mas? Waduhhh maaf gan, saya klo programming desktop nyaris tidak pernah menggunakan odbc, entah kenapa saya lebih prefer menggunakan pendekatan query string, bagi saya itu memberikan fleksibilitas dalam hal ber-query. Kalo yang dimaksud adalah konektor odbc maka bisa didapatkan melalui https://dev.mysql.com/downloads/connector/odbc/. Terima kasih.
kalo pake odbc di paling atas pake
imports system.data.odbc
nah dikodingan diatas mysql nya tinggal diganti odbc
contoh: mysqlcommand jadi odbccommad
Thanks tambahannya mas Reza
sama sama gan
ok gan makasih. kayaknya projectnya tak ganti aja ke Mysql connector. soalnya referensi di web memang lebih kebanyakan menggunakan Mysql Connector. sukses gan (y)
Oke mas, siap…. thanks udah berkunjung. Sukses yo…
imgLogoInstansi ini dari mana ya….
Itu kalo tidak salah komponen PictureBox1, maaf saya sudah lama sekali tidak menggunakan vb.net, silahkan dicoba kalo property .Image.Save() bla bla itu ada, berarti ya bener…
gan mau tanya nih,, klo udah upload gambarnya truz ngesave di folder apa ya
Begini mas, sebenarnya untuk upload image ada beberapa metode, metode yang paling mainstream biasanya cuma ada 2 metode, yaitu:
1. Menyalin image ke satu direktori kemudian grab nama image yang kemudian nama image tersebut disimpan dalam salah satu field database
2. Menyimpan image langsung ke database dengan mekanisme convert image ke bentuk tipe data BLOB terlebih dahulu
Nah pada tulisan ini, membahas metode yang kedua mas, jadi jawaban atas pertanyaan mas Abdul adalah, metode ini tidak ada direktori penyimpanan image. Nah pada implementasinya juga mesti bijaksana dan bijaksini, tergantung kasusnya ya mas. Kira-kira begitu, apakah sudah cukup menjawab?
Terima kasih.
Mas itu @picture dari mana ya?? Ane bingung
Maksud dari @picture itu adalah binding parameter, metode query seperti ini adalah pendekatan dari metode PDO Statement, dimana secara garis besar, pendekatan tersebut membutuhkan 3 langkah yaitu prepare, bind, dan execute.
Dimana pendefinisian bind parameter dari @picture terletak disini
//****** BAGIAN BINDING PARAMETER
imgLogoInstansi.Image.Save(ms, imgLogoInstansi.Image.RawFormat)
Dim data As Byte() = ms.GetBuffer()
Dim p As New MySqlParameter(“@picture”, MySqlDbType.Blob)
p.Value = data
cmd.Parameters.Add(p)
//****** BAGIAN execute
cmd.ExecuteNonQuery()
Revisi: Dalam artikel ini sebelumnya component PictureBox bernama “PictureBox1”, yang benar adalah “imgLogoInstansi”