Mengakses database MySQL menggunakan C# bagian 2

Posted by Kamarudin • 4 minute read • Comments

Seperti yang sudah saya janjikan pada postingan sebelumnya, kali ini kita akan membahas bagaimana cara memanfaatkan class Mahasiswa dan MahasiswaDao pada Presentation layer

Sudah merupakan rahasia umum :grin: untuk melakukan koneksi ke database MySQL kita membutuhkan string koneksi berikut :

SERVER=nama_server;DATABASE=nama_database;UID=user_database;PASSWORD=user_password

Terlihat dengan jelas ada beberapa informasi yang tentunya tidak ingin kita hardcode di program, kita ambil contoh informasi nama_server dan nama_database.

Kalo dulu mungkin kita biasanya meyimpan informasi tersebut di registry windows atau file dengan format INI, tapi kali ini kita akan memanfaatkan file XML yang sudah disediakan .NET

Bagaimana cara menambahkan file XML tersebut ikuti langkah-langkah berikut :

kemudian kita lengkapi kodenya seperti berikut :

gampang bukan ??? :)

Cara mengakses informasi pada file XML tersebut akan kita bahas pada saat pembuat class DBConnection.

Class DBConnection dari namanya kita sudah ngerti kalo class ini tugasnya untuk melakukan koneksi ke database dalam hal ini database MySQL.

Oke langsung saja kita tambahkan class baru.

Namespace (package kalo istilah javanya) MySql.Data.MySqlClient kita butuhkan untuk bisa menggunakan class-class akses database MySQL.

Sedangkan namespace System.Configuration dibutuhkan agar kita bisa menggunakan class ConfigurationSettings untuk mengakses file XML yang sudah kita buat pada langkah-langkah sebelumnya.

Berikut adalah kode lengkap class DBConnectionnya :

using MySql.Data.MySqlClient;
using System.Configuration;

namespace DemoDAO
{
    public class DBConnection
    {

        private MySqlConnection conn = null;
        private static DBConnection dbConn = null;

        // constructor
        private DBConnection()
        {
            if (conn == null)
            {
                // cara membaca informasi yang ada pada file XML (App.config)
                string server = ConfigurationSettings.AppSettings["Server"];
                string database = ConfigurationSettings.AppSettings["Database"];

                string user = "root";
                string password = "rahasia";

                string strConn = "SERVER=" + server + ";DATABASE=" + database + ";UID=" + user + ";PASSWORD=" + password;

                conn = new MySqlConnection(strConn);
                conn.Open();
            }
        }

        public static DBConnection GetInstance()
        {
            if (dbConn == null) { dbConn = new DBConnection(); }

            return dbConn;
        }

        public MySqlConnection GetConnection()
        {
            return this.conn;
        }
    }
}

Sampai disini semua persiapan sudah oke, saatnya kita melengkapi kode program untuk Presentation layer dan untuk merefresh ingatan kita saya tampilkan kembali form mahasiswa yang sudah kita rancang pada postingan sebelumnya.

Aktifkan terlebih dulu FrmMahasiswanya kemudian masuk kebagian editor codenya setelah itu tambahkan kode berikut :

Namespace DemoDAO.Model dan DemoDAO.Dao dibutuhkan agar bisa mengakses class Mahasiswa dan MahasiswaDao.

1. Menyimpan Data

private void btnSimpan_Click(object sender, EventArgs e)
{
    // buat objek mhs
    Mahasiswa mhs = new Mahasiswa();

    // isi nilai masing-masing property
    mhs.NomorMahasiswa = txtNomorMahasiswa.Text;
    mhs.Nama = txtNama.Text;
    mhs.Alamat = txtAlamat.Text;

    result = mhsDao.Save(mhs); // panggil method Save
    if (result > 0)
    {
        MsgInfo("Data sudah disimpan");
        KosongkanInputan();

        txtNomorMahasiswa.Focus();
    }
    else
    {
        MsgInfo("Data gagal disimpan");
    }
}

2. Mengupdate Data

private void btnPerbaiki_Click(object sender, EventArgs e)
{
    // buat objek mhs
    Mahasiswa mhs = new Mahasiswa();

    // isi nilai masing-masing property
    mhs.NomorMahasiswa = txtNomorMahasiswa.Text;
    mhs.Nama = txtNama.Text;
    mhs.Alamat = txtAlamat.Text;

    result = mhsDao.Update(mhs); // panggil method Update
    if (result > 0)
    {
        MsgInfo("Data sudah disimpan");
        KosongkanInputan();

        txtNomorMahasiswa.Focus();
    }
    else
    {
        MsgInfo("Data gagal disimpan");
    }
}

3. Menghapus Data

private void btnHapus_Click(object sender, EventArgs e)
{
    result = mhsDao.Delete(txtNomorMahasiswa.Text); // panggil method Delete
    if (result > 0)
    {
        MsgInfo("Data sudah dihapus");
        KosongkanInputan();

        txtNomorMahasiswa.Focus();
    }
    else
    {
        MsgInfo("Data gagal dihapus");
    }
}

4. Menampilkan data

Untuk menampilkan data kita membutuhkan 2 methode yaitu FillToListView untuk menambahkan objek mahasiswa ke ListView dan LoadDataMahasiswa untuk mengambil data mahasiswa dari database dan menyimpannya ke objek mahasiswa.

Karena data mahasiswa yang ditampilkan bisa lebih dari satu disini kita bisa menggunakan class List untuk menampung objeknya.

private void FillToListView(Mahasiswa mhs)
{

    int noUrut = lvwMahasiswa.Items.Count + 1;

    ListViewItem item = new ListViewItem(noUrut.ToString());

    item.SubItems.Add(mhs.NomorMahasiswa);
    item.SubItems.Add(mhs.Nama);
    item.SubItems.Add(mhs.Alamat);

    lvwMahasiswa.Items.Add(item);
}

private void LoadDataMahasiswa()
{
    lvwMahasiswa.Items.Clear();

    List<Mahasiswa> daftarMhs = mhsDao.GetAll();
    foreach (Mahasiswa mhs in daftarMhs)
    {
        FillToListView(mhs); // panggil method FillToListView
    }
}

Setelah itu tinggal panggil method LoadDataMahasiswa di constructor FrmMahasiswa

5. Pencarian Data Berdasarkan Nama

Untuk pencarian data kita tinggal mengoverload method  LoadDataMahasiswa dimana kita menambahkan parameter nama dengan tipe string, selain itu method MahasiswaDao yang kita panggil adalah GetByName

private void LoadDataMahasiswa(string nama)
{
    lvwMahasiswa.Items.Clear();

    List<Mahasiswa> daftarMhs = mhsDao.GetByName(nama);
    foreach (Mahasiswa mhs in daftarMhs)
    {
        FillToListView(mhs);
    }
}

Selanjutnya tinggal dipanggil di event btnCari_Click

private void btnCari_Click(object sender, EventArgs e)
{
    LoadDataMahasiswa(txtKeywordPencarian.Text);
}

Sebagai bonus :) saya akan tambahkan satu lagi method untuk pencarian data berdasarkan nomor mahasiswa, untuk melakukan ini kita akan menambahkan method GetByNoMahasiswa, adapun kodenya sebgai berikut :

public Mahasiswa GetByNoMahasiswa(string nomorMahasiswa)
{
    Mahasiswa mhs = null;

    strSql = "SELECT nomor_mahasiswa, nama, alamat FROM mahasiswa " +
             "WHERE nomor_mahasiswa = @1";

    using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
    {
        cmd.Parameters.AddWithValue("@1", nomorMahasiswa);

        using (MySqlDataReader dtr = cmd.ExecuteReader())
        {
            if (dtr.Read())
            {
                mhs = MappingRowToObject(dtr);
            }
        }
    }

    return mhs;
}

Method tersebut ditambahkan di class MahasiswaDao, selain itu kita juga menambahkan satu button lagi di FrmMahasiswa untuk memanggil method tersebut.

private void btnCariByNoMhs_Click(object sender, EventArgs e)
{
    Mahasiswa mhs = mhsDao.GetByNoMahasiswa(txtNomorMahasiswa.Text);
    if (mhs != null)
    {
        txtNomorMahasiswa.Text = mhs.NomorMahasiswa;
        txtNama.Text = mhs.Nama;
        txtAlamat.Text = mhs.Alamat;

        MsgInfo("Data mahasiswa ditemukan");
    }
    else
    {
        MsgInfo("Nomor mahasiswa tidak ditemukan");
    }
}

Akhirnya selesai juga, tapi mungkin saya butuh satu postingan lagi untuk menutup artikel berseri ini, insya Allah :).

Selamat MENCOBA :blush:

Comments