Home > Visual C# .NET > Mengakses database MySQL menggunakan C# bagian 1

Mengakses database MySQL menggunakan C# bagian 1

Berhubung sudah mulai bosan bermain-main dengan Visual Basic 6 dan Visual Basic .NET kali ini kita akan menggunakan C# untuk mencoba membuat aplikasi sederhana mengakses database.

Database yang akan kita gunakan adalah MySQL versi 5.x dan untuk C# nya saya menggunakan versi .NET 2008.

Untuk menyederhanan postingan kali ini saya cukupkan dulu untuk mengakses 1 tabel yaitu tabel mahasiswa.

Adapun struktur tabelnya seperti berikut :

Untuk akses database kali ini kita akan menggunakan konsep DAO, walaupun enggak 100% :D , dimana kita akan memisahkan modul program menjadi beberapa layer/lapisan yaitu :

  1. Presentation
  2. Business Logic
  3. Data Access

Kok mirip 3-Tier Architecture ya? :D

Untuk presentation layer berhubungan dengan UI (user interface) dalam artikel ini kita akan menggunakan Windows Form.

Business Logic biasanya berhubungannya dengan entity class dan entity class sendiri merupakan representasi tabel-tabel yang ada di database.

Terakhir Data Access yaitu bagian yang menangani urusan akses database.

1. Memulai project baru

Jalankan Visual Studio .NET kemudian aktifkan menu File -> New -> Project …

2. Membuat Presentation Layer

Presentation layer berhubungan dengan user interface atau tampilan, dan untuk tampilannya kita akan desain seperti berikut :

3. Membuat Business Logic

Business Logic ada hubungannya dengan entity class yang merupakan representasi dari tabel-tabel yang ada didatabase.

Berdasarkan struktur tabel diatas kita akan menambahkan class baru dengan nama Mahasiswa yang memiliki tiga property yaitu NomorMahasiswa, Nama dan Alamat.

Jadi property ini sudah mewakili method mutator dan accessor yang sudah biasa kita kenal penggunakannya di Java.

Sebelum kita menambahkan class Mahasiswa kita tambahkan dulu folder untuk mengelompok ke tiga layer diatas, caranya dengan mengklik kan project -> Add -> New Folder

kita akan menambahkan 3 folder yaitu Dao, Model dan View

jika sudah kita klik kanan folder Model -> Add -> Class …

pada gambar diatas tambahkan access modifier public agar class Mahasiswa bisa digunakan antar namespace (package kalo istilah javanya).

Oke sampai disini kita tinggal melengkapi kode untuk class Mahasiswa diatas, kode lengkapnya sebagai berikut :

namespace DemoDAO.Model
{
    public class Mahasiswa
    {
        private string nomorMahasiswa;
        public string NomorMahasiswa
        {
            get { return nomorMahasiswa; }
            set { nomorMahasiswa = value; }
        }

        private string nama;
        public string Nama
        {
            get { return nama; }
            set { nama = value; }
        }

        private string alamat;
        public string Alamat
        {
            get { return alamat; }
            set { alamat = value; }
        }
    }
}

4. Membuat Data Access

Lapisan ini biasanya berisi operasi CRUD (Create, Read, Update, Delete), tapi kita akan menggunakan istilah yang sedikit berbeda untuk nama operasinya yaitu :

  1. Save
  2. Update
  3. Delete
  4. GetAll
  5. GetByName

Biasanya untuk penamaan classnya cukup menambahkan Akhiran (Suffixes) Dao untuk setiap class entitynya.

Contoh untuk class entity Mahasiswa, biasanya class Data Accessnya diberi nama MahasiswaDao.

Oke langsung aja kita klik kanan folder Dao -> Add -> Class …

jangan lupa tambahkan juga keyword public pada class MahasiswaDaonya.

jadi hasil akhir sementar project kita seperti berikut :

Untuk mengakses database MySQL kita membutuhkan library MySql Connection yang bisa didownload disini.

Untuk tutorial kali ini saya menggunakan versi MySQL Connector/Net 6.2.4

Silahkan download library tersebut kemudian lakukan instalasi.

Adapun langkah-langkah untuk menambahkan library tersebut kedalam project adalah sebagi berikut :

Klik kanan References -> Add References …

Selanjutnya kita tinggal melengkapi class MahasiswaDaonya.

1. Menambahkan namespace MySql.Data.MySqlClient dan DemoDAO.Model

namespace MySql.Data.MySqlClient dibutuhkan agar bisa menggunakan class-class untuk mengakses database MySQL sedangkan namespace DemoDAO.Model agar bisa mengakses class Mahasiswa dari class MahasiswaDao.

2. Menambah beberapa variabel pendukung seperti conn, strSql dan sebuah constructor

private MySqlConnection conn;
private string strSql = string.Empty;

// constructor
public MahasiswaDao(MySqlConnection conn)
{
    this.conn = conn;
}

3. Menambahkan method Save, Update dan Delete

public int Save(Mahasiswa mhs)
{
    strSql = "INSERT INTO mahasiswa (nomor_mahasiswa, nama, alamat) VALUES (@1, @2, @3)";

    using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
    {
        cmd.Parameters.AddWithValue("@1", mhs.NomorMahasiswa);
        cmd.Parameters.AddWithValue("@2", mhs.Nama);
        cmd.Parameters.AddWithValue("@3", mhs.Alamat);

        return cmd.ExecuteNonQuery();
    }
}

public int Update(Mahasiswa mhs)
{
    strSql = "UPDATE mahasiswa SET nama = @1, alamat = @2 WHERE nomor_mahasiswa = @3";

    using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
    {
        cmd.Parameters.AddWithValue("@1", mhs.Nama);
        cmd.Parameters.AddWithValue("@2", mhs.Alamat);
        cmd.Parameters.AddWithValue("@3", mhs.NomorMahasiswa);

        return cmd.ExecuteNonQuery();
    }
}

public int Delete(string nomorMahasiswa)
{
    strSql = "DELETE FROM mahasiswa WHERE nomor_mahasiswa = @1";

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

        return cmd.ExecuteNonQuery();
    }
}

4. Menambahkan method GetAll dan GetByName

private Mahasiswa MappingRowToObject(MySqlDataReader dtr)
{
    Mahasiswa mhs = new Mahasiswa();

    mhs.NomorMahasiswa = dtr["nomor_mahasiswa"] is DBNull ? string.Empty : dtr["nomor_mahasiswa"].ToString();
    mhs.Nama = dtr["nama"] is DBNull ? string.Empty : dtr["nama"].ToString();
    mhs.Alamat = dtr["alamat"] is DBNull ? string.Empty : dtr["alamat"].ToString();

    return mhs;
}

public List<Mahasiswa> GetAll()
{
    List<Mahasiswa> daftarMhs = new List<Mahasiswa>();

    strSql = "SELECT nomor_mahasiswa, nama, alamat FROM mahasiswa " +
             "ORDER BY nama";

    using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
    {
        using (MySqlDataReader dtr = cmd.ExecuteReader())
        {
            while (dtr.Read())
            {
                daftarMhs.Add(MappingRowToObject(dtr));
            }
        }
    }

    return daftarMhs;
}

public List<Mahasiswa> GetByName(string nama)
{
    List<Mahasiswa> daftarMhs = new List<Mahasiswa>();

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

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

        using (MySqlDataReader dtr = cmd.ExecuteReader())
        {
            while (dtr.Read())
            {
                daftarMhs.Add(MappingRowToObject(dtr));
            }
        }
    }

    return daftarMhs;
}

Selesai sudah pembuatan class MahasiswaDaonya sekarang tinggal bagaimana cara menggunakan class Mahasiswa dan MahasiswaDao pada Presentation layer, tapi … akan saya bahas pada postingan berikutnya :D insya Allah.

Selamat MENCOBA :)

Referensi : Geeks Portal .NET Indonesia

  1. arief
    July 18, 2011 at 4:39 am | #1

    itu pakai apa sih bos ? listview apa gridview ?

  2. cinta
    December 3, 2011 at 6:48 am | #3

    bos kasih contoh membuat report di visual c# dong

    thx you bos

  3. January 13, 2012 at 10:31 am | #5

    ada listing code sample vb 6 CRUDE dengan konsep oop dan koneksi database sql server

  4. al
    April 13, 2012 at 10:11 pm | #7

    bos, masih newbie ni, ada penjelasan untuk listing code nomer 4 ga? Klo pake gridview dan bukan pake listview apa sama aja caranya, tx you

    • April 14, 2012 at 9:08 am | #8

      Berarti return valuenya ganti DataTable om, contoh :

      public DataTable GetAll()
      {
          DataTable dt = null;
      
          strSql = "SELECT nomor_mahasiswa, nama, alamat FROM mahasiswa " +
                   "ORDER BY nama";
      
          using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
          {
              using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
              {
                  da.Fill(dt);
              }
          }
      
          return dt;
      }
      
  5. Edi
    May 28, 2012 at 11:18 am | #9

    om, tanya dong, itu pas bagian 4, pas method MappingRowToObject, itu buat apa yah?? soalnya saya masih bingung dengan code didalamnya (terutama pas masukkin nilai buat object mhs)..

    mohon bimbingannya.. :)

    • May 28, 2012 at 11:41 am | #10

      Method MappingRowToObject digunakan untuk menyingkat penulisan kode aja kok om, tanpa method MappingRowToObject, penulisan kode untuk method GetAll dan GetByName menjadi seperti berikut :

      public List<Mahasiswa> GetAll()
      {
          List<Mahasiswa> daftarMhs = new List<Mahasiswa>();
      
          strSql = "SELECT nomor_mahasiswa, nama, alamat FROM mahasiswa " +
                   "ORDER BY nama";
      
          using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
          {
              using (MySqlDataReader dtr = cmd.ExecuteReader())
              {
                  while (dtr.Read())
                  {
                      Mahasiswa mhs = new Mahasiswa();
                      mhs.NomorMahasiswa = dtr["nomor_mahasiswa"] is DBNull ? string.Empty : dtr["nomor_mahasiswa"].ToString();
                      mhs.Nama = dtr["nama"] is DBNull ? string.Empty : dtr["nama"].ToString();
                      mhs.Alamat = dtr["alamat"] is DBNull ? string.Empty : dtr["alamat"].ToString();
      
                      daftarMhs.Add(mhs);
                  }
              }
          }
      
          return daftarMhs;
      }
      
      public List<Mahasiswa> GetByName(string nama)
      {
          List<Mahasiswa> daftarMhs = new List<Mahasiswa>();
      
          strSql = "SELECT nomor_mahasiswa, nama, alamat FROM mahasiswa " +
                   "WHERE nama LIKE @1 " +
                   "ORDER BY nama";
      
          using (MySqlCommand cmd = new MySqlCommand(strSql, conn))
          {
              cmd.Parameters.AddWithValue("@1", "%" + nama + "%");
      
              using (MySqlDataReader dtr = cmd.ExecuteReader())
              {
                  while (dtr.Read())
                  {
                      Mahasiswa mhs = new Mahasiswa();
                      mhs.NomorMahasiswa = dtr["nomor_mahasiswa"] is DBNull ? string.Empty : dtr["nomor_mahasiswa"].ToString();
                      mhs.Nama = dtr["nama"] is DBNull ? string.Empty : dtr["nama"].ToString();
                      mhs.Alamat = dtr["alamat"] is DBNull ? string.Empty : dtr["alamat"].ToString();
      
                      daftarMhs.Add(mhs);
                  }
              }
          }
      
          return daftarMhs;
      }
      

      Coba perhatikan nomor baris 14 – 19 dan 43 – 48 terjadi duplikasi kode bukan ??? nah itukan baru dua method klo misalkan ada method yg lain misal GetByNomorMahasiswa tentu kita akan copas kode yg sama lagi bukan ???
      Belum lagi klo terjadi perubahan berarti kita harus merubah di dua tempat (GetAll dan GetByName) tapi kalo menggunakan method MappingRowToObject kita cukup merubah di satu tempat.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s