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

Mengakses database MySQL menggunakan C# bagian 1

June 25, 2011

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%😀, 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?😀

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😀 insya Allah.

Selamat MENCOBA🙂

Referensi : Geeks Portal .NET Indonesia

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

    itu pakai apa sih bos ? listview apa gridview ?

    • July 18, 2011 at 5:03 am

      ListView om

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

    bos kasih contoh membuat report di visual c# dong

    thx you bos

    • December 3, 2011 at 9:17 am

      Mungkin lain waktu🙂

  3. January 13, 2012 at 10:31 am

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

    • January 29, 2012 at 6:50 pm

      Coba disini om, cuma databasenya pake Ms Access.

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

    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

      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

    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

      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.

  6. Ahmad7802
    September 7, 2012 at 6:50 pm

    Om klo buat simpan photo dan tampil di layer gimana ? Thanks

  7. January 23, 2014 at 1:24 pm

    Mas sampean mengatakan :

    Untuk akses database kali ini kita akan menggunakan konsep DAO, walaupun enggak 100%😀

    Kenapa gak 100% DAO ?, kalau aplikasi yang 100% DAO itu ciri2 nya apa ?

    Program ini tidak 100% menggunakan konsep DAO, tapi 100% Object Oriented Programming (OOP) kan ?

    Trims

  1. April 16, 2014 at 9:14 am
Comments are closed.
%d bloggers like this: