Artikel sederhana ini membahas bagaimana melakukan koneksi secara manual dari aplikasi
Visual C#.NET ke database MySQL. Untuk menghubungkan kedua teknologi tersebut,
dibutuhkan suatu kumpulan library yang berfungsi sebagai konektor antara aplikasi dengan
database server. MySQL sendiri sudah menyediakan konektor tersebut dengan nama MySQL
Connector/Net. Bila Anda belum punya konektor tersebut, silakkan download di situs resmi
MySQL, cari versi terbarunya di bagian Connector/Net.
Sebagai contoh basis datanya, saya menggunakan basis data World.sql, yang juga dapat di-
download dari situsnya MySQL.
Langkah-langkah
1. Buatkan project baru pada Visual Studio, pilih Windows Forms Application pada Visual
Studio installed templates.
4. Karena kita menambahkan library tambahan yaitu MySQL Connector/Net, maka klik kanan
pada node Reference pada jendela Solution Explorer, kemudian pilih Add Reference, setelah itu
muncul jendela Add Reference, klik Tab Browse. Kemudian cari folder hasil ekstrak dari
MySQL Connector/Net, pilihlah file mysql.data.dll. Berikut gambar dari jendela Add Reference
dan hasil referensi ke file mysql.data.dll yang telah berhasil.
5. Klik kanan form1.cs (misalnya nama form-nya form1.cs) pada aplikasi yang telah Anda buat,
pilih View Code, kemudian tambahkan kode program berikut pada form1.cs.
File Form1.cs
view sourceprint
01.using System;
02.using System.Data;
03.using System.Windows.Forms;
04.
05.// referensi tambahan ke library MySQL Connector/Net
06.using MySql.Data.MySqlClient;
07.
08.namespace bowo.xcsl
09.{
10. public partial class Form1 : Form
11. {
12. // definisi data koneksi
13. private string host = "localhost";
14. private string username = "root";
15. private string password = "";
16. private string database = "world";
17. private string tabel = "city";
18.
19. public Form1()
20. {
21. InitializeComponent();
22. }
23.
24. private void AmbilData()
25. {
26. // coba ambil data di database mysql
27. try
28. {
29. // waktu mulai proses
30. long start = Environment.TickCount;
31.
32. // lakukan koneksi
33. MySqlConnection konektor =
34. new MySqlConnection("datasource=" + host + ";" +
35. "username=" + username + ";" +
36. "password=" + password + ";" +
37. "database=" + database);
38.
39. // buatkan dataset
40. DataSet sqlDataset = new DataSet();
41.
42. // query sql
43. MySqlDataAdapter sqlAdapter =
44. new MySqlDataAdapter(
45. "SELECT * FROM " + tabel, konektor);
46.
47. // binding data
48. sqlAdapter.Fill(sqlDataset, tabel);
49.
50. // kirim ke datagrid
51. dgridHasil.DataSource = sqlDataset.Tables[tabel].DefaultView;
52.
53. // waktu akhir proses
54. long end = Environment.TickCount;
55.
56. // lama pemrosesan
57. lblWaktuProses.Text = "Waktu Pemrosesan = " +
58. (end - start).ToString() + " ms";
59. }
60. catch (MySqlException e)
61. {
62. MessageBox.Show(e.Message);
63. }
64. catch (Exception e)
65. {
66. MessageBox.Show(e.Message);
67. }
68. }
69.
70. private void btAmbilData_Click(object sender, EventArgs e)
71. {
72. AmbilData();
73. }
74.
75. private void btKeluar_Click(object sender, EventArgs e)
76. {
77. Application.Exit();
78. }
79. }
80.}
Kode di atas akan melakukan koneksi ke database MySQL dengan nama database world dan
akan melakukan proses mengambil semua data pada tabel city. Jika terjadi kesalahan dalam
penulisan perintah SQL, maka terjadi exception pada MySQLException dan akan memberitahu
kepada Anda letak kesalahan perintah SQL.
Dilihat dari arus datanya berdasarkan kode program di atas, maka dapat digambarkan secara
sederhana sebagai berikut:
[MySQL Database Server] -> MySqlConnection -> DataSet -> MySqlDataAdapter ->
DataGridView -> [User]
6. Pastikan MySQL Servernya telah dijalankan, setelah itu lakukan proses Build program (F6)
kemudian jalankan program (CTRL + F5). Berikut ini tampilan apabila tombol Ambil Data di-
klik.
Pengelolaan Database MySQL Melalui C#
August 26, 2009 by Kang Admin Leave a reply »
Pada dasarnya C#.NET memiliki database server sendiri yang khusus dibuat untuk teknologi
.NET yaitu MSSQL atau yang lebih dikenal dengan SQL Server. MySQL sebagai database
server yang sangat populer tidak ketinggalan untuk menyediakan connector agar databasenya
tetap bisa diakses oleh berbagai macam bahasa pemrograman dan juga multiplatform, salah
satunya untuk platform Windows dan untuk framework .NET, MySQL menyediakan
Connector/Net sebagai library yang khusus dibuat untuk bahasa pemrograman yang berbasis
.NET Framework.
Aplikasi yang akan kita buat merupakan aplikasi yang sederhana, yang penting ada proses
INSERT, UPDATE, DELETE yang merupakan proses yang wajib disediakan disamping proses
SELECT apabila kita membuat aplikasi yang berhubungan dengan pengelolaan database.
Aplikasi ini sebenarnya saya buat secara coba-coba. Minimnya pengetahuan dan sumber
referensi membuat saya dalam melakukan coding harus melewati proses ‘try and error‘ berkali-
kali. Entah kenapa waktu saya utak-atik ternyata bisa jadi dan berjalan seperti yang diharapkan,
Alhamdulillah….
Mungkin Anda lebih tahu untuk coding-nya agar lebih simpel dan bagus, silakkan beri
komentarnya…
Pada dasarnya saya membuat tiga buah kelas untuk membuat program ini. Kelas tersebut antara
lain :
1. Kelas KoneksiServer
Kelas ini bertujuan untuk melakukan koneksi ke database MySQL. Kelas ini juga nantinya
tersedia property untuk melakukan query.
2. Kelas FormUtama
Kelas ini sebenarnya merupakan kelas yang dibuat secara otomatis ketika sebuah form dibuat.
Kelas ini menampung komponen / control windows sebagai antarmuka utama aplikasi.
3. Kelas FormPengelolaan
Untuk memudahkan agar control untuk pengelolaan tidak tercampur dengan hasil keluaran, maka
dibuat kelas ini.
Sebagai databasenya, saya menggunakan contoh database world.sql yang disediakan secara
gratis pada situs dev.mysql.com
1. Buat project baru pada Visual Studio, kemudian pilih templates untuk Windows Form
Applications
2. Buatkan referensi ke MySQL Connector/Net. Bila Anda belum paham bagaimana caranya,
silakkan lihat artikel Koneksi C#.NET dengan MySQL Menggunakan MySQL Connector/Net
3. Tambahkan dan susun beberapa komponen seperti gambar berikut :
1. File FormUtama.cs
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace bowo.xcsl
{
public partial class FormUtama : Form
{
// buatkan objek koneksi ke server
private KoneksiServer koneksi = new KoneksiServer();
public FormUtama()
{
InitializeComponent();
btEdit.Enabled = false;
btHapus.Enabled = false;
}
try
{
koneksi.MyCmd.ExecuteNonQuery();
// proses hapus OK
MessageBox.Show("Data telah dihapus !", "Hapus OK",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (MySqlException err)
{
MessageBox.Show("MySQL ERROR : " + err.Message, "SQL
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception err)
{
MessageBox.Show("PROGRAM ERROR : " + err.Message, "PROGRAM
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// tutup koneksi
koneksi.Konektor.Close();
try
{
MySqlDataAdapter sqlAdapter = new
MySqlDataAdapter(koneksi.MyCmd.CommandText, koneksi.Konektor);
sqlAdapter.Fill(dataSet, koneksi.MyCmd.CommandText);
dtGridKeluaran.DataSource =
dataSet.Tables[koneksi.MyCmd.CommandText].DefaultView;
lblNBaris.Text = "Jumlah Data = " +
dtGridKeluaran.RowCount.ToString();
}
catch (MySqlException err)
{
MessageBox.Show("MySQL ERROR : " + err.Message, "SQL ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception err)
{
MessageBox.Show("PROGRAM ERROR : " + err.Message, "PROGRAM
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// tutup koneksi
koneksi.Konektor.Close();
}
}
}
Statemen :
Statemen :
merupakan statemen untuk membuat objek dataSet. DataSet merupakan kontrol untuk
melakukan akses data. DataSet juga menampung semua data tabel, relasi, dan juga hasil dari
query. DataSet menyimpan data tersebut pada memori sehingga data tersebut dapat dengan cepat
diakses atau dimanipulasi.
Statemen :
Karena aplikasi ini memiliki form pengelolaan tersendiri, maka statemen di atas perlu dituliskan.
Statemen :
merupakan variabel untuk menyimpan nomor id data tabel. Nilai pada variabel ini nantinya
digunakan sebagai data unik untuk melakukan proses edit dan delete.
Aplikasi ini dalam melakukan proses edit dan delete harus mengetahui nomor id dari tabel yang
bersangkutan melalui DataGrid yang ditampilkan. Oleh karena itu pengguna harus memilih
kolom ID pada DataGrid untuk memilih data mana yang akan dihapus atau diedit. Untuk itu
event handler berikut perlu dituliskan.
Karena event handler tersebut dapat dijalankan untuk semua kolom dan baris, sedangkan untuk
melakukan proses edit dan delete hanya membutuhkan data dari kolom ke 0 maka statement
berikut perlu dituliskan.
if (e.ColumnIndex == 0)
{
id = dtGridKeluaran.CurrentCell.Value.ToString();
……
variabel id di atas akan memperoleh nilai dari cell pada kolom ke 0 yang dijalankan ketika
pengguna memilih nomor id pada DataGrid.
Statemen :
akan membuat objek dari FormPengelolaan, argumen yang disertakan menandakan bahwa form
yang dibuat untuk keperluan edit pada data dengan id tertentu.
Statemen :
formKelola.FormUtamaRef = this;
membuat formKelola dapat mengakses data-data pada form utama. Hal ini untuk melakukan
proses Update terhadap DataGrid setelah pengguna menekan tombol OK yang menandakan telah
terjadi perubahan pada isi tabel.
Statemen :
formKelola.ShowDialog();
berguna untuk menampilkan formKelola dari formUtama. Form utama tidak akan bisa diakses
sebelum formKelola ditutup.
Statemen :
akan melakukan proses delete pada data tertentu. Property SqlQuery merupakan property yang
akan melakukan koneksi ke server MySQL kemudian mempersiapkan proses eksekusi terhadap
query yang dilampirkan pada argumennya.
Statemen :
koneksi.MyCmd.ExecuteNonQuery();
berguna untuk mengeksekusi query dari perintah sql seperti Insert, Update, dan Delete. Method
ExecuteNonQuery merupakan method milik kelas MySqlCommand.
Method :
dataSet.Clear();
………
}
digunakan sebagai method untuk melakukan proses refresh terhadap tampilan DataGrid.
dataSet.Clear() akan membuat dataSet dikosongkan sehingga secara otomatis tampilan DataGrid
akan kosong. Untuk mengisinya kembali beberapa statemen berikut diperlukan. Statemen ini
merupakan statemen untuk memperoleh data (proses SELECT).
Statemen di atas mirip dengan statemen pada artikel Koneksi C#.NET dengan MySQL
Menggunakan MySQL Connector/Net, namun pada aplikasi ini tidak lagi menggunakan tabel
tunggal, melainkan relasi tabel, sehingga dapat diganti dari tabel ke property CommandText.
Pada aplikasi ini dibuatkan beberapa Exception Handling yang berguna untuk mengantisipasi
kesalahan baik dari kesalahan sintaks query MySQL (MySqlException) maupun kesalahan
umum program (Exception).
2. File FormPengelolaan.cs
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace bowo.xcsl
{
public partial class FormPengelolaan : Form
{
// buka koneksi ke server
private KoneksiServer koneksi = new KoneksiServer();
private FormUtama formUtamaRef;
private MySqlDataReader dataReader;
private bool isTambah;
private string id;
// masukkan OK
else
{
try
{
// mode tambah data
if (isTambah)
{
// sql penambahan data dari masukkan pengguna
koneksi.SqlQuery("INSERT INTO city(name, countrycode,
district, population)" +
" VALUES('" + txtKota.Text + "', '" + AmbilKodeNegara() +
"', '" + txtProvinsi.Text + "', " + txtPopulasi.Text + ")");
// proses tambah OK
MessageBox.Show("Data telah ditambahkan.", "Input OK",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// proses edit OK
MessageBox.Show("Data telah diubah.", "Edit OK",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// tutup koneksi
koneksi.Konektor.Close();
// tutup form
this.Close();
}
catch (MySqlException err)
{
MessageBox.Show("MySQL ERROR : " + err.Message, "SQL ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception err)
{
MessageBox.Show("PROGRAM ERROR : " + err.Message, "PROGRAM
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public void AmbilNegara()
{
// ambil nama negara tanpa duplikasi
koneksi.SqlQuery("SELECT DISTINCT name FROM country ORDER BY name
ASC");
try
{
dataReader = koneksi.MyCmd.ExecuteReader();
// tutup dataReader
dataReader.Close();
}
catch (MySqlException err)
{
MessageBox.Show("MySQL ERROR : " + err.Message, "SQL ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception err)
{
MessageBox.Show("PROGRAM ERROR : " + err.Message, "PROGRAM
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// tutup koneksi
koneksi.Konektor.Close();
}
try
{
dataReader = koneksi.MyCmd.ExecuteReader();
// tutup dataReader
dataReader.Close();
}
catch (MySqlException err)
{
MessageBox.Show("MySQL ERROR : " + err.Message, "SQL ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception err)
{
MessageBox.Show("PROGRAM ERROR : " + err.Message, "PROGRAM
ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// tutup koneksi
koneksi.Konektor.Close();
}
Statemen :
merupakan statemen untuk deklarasi variabel. Diantaranya ada untuk melakukan koneksi,
variabel penampung referensi ke kelas FormUtama, dataReader sebagai “penampung” data yang
siap untuk ditampilkan, variabel isTambah sebagai penentu apakah saatnya mode tambah atau
bukan, variabel id sebagai “alamat data” untuk mengedit data dengan id tertentu.
Statemen :
merupakan statemen untuk melakukan proses penambahan data. Data diambil dari textbox
masukkan. Sedangkan method AmbilKodeNegara merupakan method untuk mengambil kode
negara dari nama negara yang ditampilkan pada items combobox.
Statemen :
koneksi.MyCmd.ExecuteNonQuery();
Statemen :
koneksi.Konektor.Close();
formUtamaRef.UpdateDataGrid();
this.Close();
Berguna untuk menutup koneksi setelah selesai proses tambah atau edit, kemudian akan
melakukan proses refresh pada DataGrid pada FormUtama, kemudian secara otomatis
FormPengelolaan akan ditutup.
Method :
………..
berguna untuk mendapatkan nama-nama negara pada database dan akan memasukkan data
tersebut ke items combobox.
Statemen :
dataReader = koneksi.MyCmd.ExecuteReader();
Statemen :
while (dataReader.Read())
{
cmbNegara.Items.Add(dataReader.GetString(”name”));
berfungsi untuk mendapatkan semua data query dengan nama field name kemudian memasukkan
nilainya ke items milik combobox. Proses tersebut akan berhenti jika Method Read() bernilai
false yang berarti data telah habis dibaca.
Method / Statemen :
berfungsi untuk mendapatkan kode negara dari nama negara. Hal ini dilakukan karena proses
pengolahan hanya pada tabel city yang tidak memiliki nama negara namun memiliki kode
negara. Sedangkan tabel country memiliki kode dan nama negara sehingga kita membutuhkan
tabel country ini untuk mendapatkan kode negara dari nama negara yang kemudian kode negara
ini akan dimasukkan ke dalam tabel city. Mungkin method AmbilKodeNegara() ini bisa diganti
dengan subquery yang langsung dituliskan pada perintah query dimana method ini dipanggil.
Method :
public void TampilkanDataTerpilih()
{
…………….
merupakan method yang berguna untuk menyalin data terpilih (saat penguna memilih kolom id
pada DataGrid, kemudian menekan tombol edit) yang dijalankan pada saat tombol edit ditekan.
Statemen :
dataReader = koneksi.MyCmd.ExecuteReader();
if (dataReader.Read())
{
txtKota.Text = dataReader.GetString(”kota”);
txtProvinsi.Text = dataReader.GetString(”district”);
txtPopulasi.Text = dataReader.GetString(”population”);
cmbNegara.SelectedItem = dataReader.GetString(”negara”);
merupakan statement untuk mendapatkan data query tunggal, artinya keluarannya hanya satu
buah. Data dari dataReader disalin ke textbox yang bersesuaian berdasarkan nilai argumen
dataReader.GetString();
Kelas KoneksiServer yang berada pada file KoneksiServer.cs merupakan kelas yang digunakan
untuk melakukan koneksi ke server database MySQL. Oleh karenanya kelas ini seharusnya
dibuatkan objeknya dahulu sebelum melakukan proses query. Untuk membuat kelas ini nya
cukup klik kanan pada project di jendela Solution Explorer, dan pilih Add -> Class… Setelah
jendela Add New Item muncul ganti nama filenya menjadi KoneksiServer.cs
Berbeda dengan kelas FormUtama dan FormPengelolaan, kelas ini bukanlah kelas yang
diturunkan dari kelas Form, jadi kelas ini tidak memiliki tampilan form windows.
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace bowo.xcsl
{
// kelas koneksi ke MySQL Server
public class KoneksiServer
{
// definisi data koneksi
private string host = "localhost";
private string username = "root";
private string password = "";
private string database = "world";
// inisialisasi koneksi
public void SqlQuery(string sql)
{
// objek untuk keperluan penulisan dan operasi sql
myCmd = new MySqlCommand();
Statemen :
merupakan statemen penting untuk inisialisasi awal agar aplikasi dapat terhubung dengan server
dengan baik.
Statemen :
konektor.Open();
berguna untuk melakukan koneksi ke server database MySQL, kemudian buka koneksi tersebut.
Statemen :
myCmd.CommandText = sql;
myCmd.Connection = konektor;
MySqlCommand akan menampung sintaks sql yang berasal dari parameter method
SqlQuery(string sql), yang kemudian akan menentukan koneksi yang dipakainya, dalam hal ini
koneksi yang baru saja dibuat.
Karena kelas ini digunakan oleh kelas-kelas lain yang dituliskan dalam file-file yang terpisah
namun tetap dalam satu namespace, maka property tambahan berikut yang bersifat public
diperlukan. Hal ini berguna agar kelas lain dapat mengakses kelas ini melalui property yang
bersangkutan. Berikut property yang dimaksud :
Catatan : Mengingat program ini merupakan program dari hasil percobaan, sehingga program ini
belum teruji 100 %, kemungkinan masih banyak bugs (Use At Your Own Risk !! ). Mungkin
Anda tahu cara koneksi ke server dan pemrograman databasenya ada yang lebih baik lagi, karena
saya juga masih belajar dan tergolong newbie. Namun demikian semoga program ini dapat
menjadi pengetahuan tambahan bagi Anda yang suka coding.
Bila Anda mau mencoba program pengolah database ini, silakkan download link berikut :