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

Mengakses database MySQL menggunakan C# bagian 2

June 26, 2011

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 😀 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 🙂

Categories: Visual C# Tags: , , , , ,
  1. kunglaw
    July 12, 2011 at 4:33 pm

    terus kelanjutannya gimana tuhh bang…
    kan udah selesai tuh koneknya..

    trus GUI formnya gimana…??
    penggunaan aplikasinya gimana…??

    klo bisa jawab di YM ane yaa…
    ane tunggu.

    ane pengen tau klo C# pake Mysql bisa gak…
    soalnya klo pake SQL server beratnya minta ampuy….

    • July 13, 2011 at 1:30 am

      Enggak usah nunggu kelanjutannya om, sample program diatas udah bisa dicoba kok

  2. Heru
    July 25, 2011 at 4:22 pm

    klo untuk jaringan lan gimana bang, soalnya saya dah coba untuk koneksi string nama server saya sesuaikan dengan ip komputer server tapi ga bisa, apa emang ada setingan lain di mysqlnya, mohon solusinya.

    • July 26, 2011 at 2:03 am

      coba cek privilage usernya om, bisa digunakan untuk login dari komputer lain enggak.

  3. arham
    August 16, 2011 at 2:11 am

    asslmkm..

    thnks..sangat bermanfaat

    • August 16, 2011 at 3:45 am

      Waalaikumussalam
      Ok om tq udah mampir 🙂

  4. wahyu widayanto
    August 20, 2011 at 8:32 am

    Mas mau tanya
    ane lagi bingun ngitung penambahan tanggal di j2me.
    ane rencana pake datefield yg merupakan komponen tanggal dij2me.

    ane sedang bikin aplikasi penghitung masa kesuburan dg proses :

    1. tanggal awal menstruasi : ……
    2. lama Siklus menstruasi : …….
    3 Menghitung masa sbur =
    tanggal awal mens + lama siklus
    examp:
    Jan, 17 2011 + 18 hari = 3 Pebruari 2011
    jadi masa subur anda pada 3 pebruari 2011

    minta bantuanny mas gimana ane bisa menjumlahkan tanggal menjadi bilangan kemudian ane bisa mendapatkan sebuah tanggal sesuai dengan tanggal dikalender yang nyata.

    trim…

    Wahyu W

    • August 20, 2011 at 9:17 am

      Om, sy cuma bisa bantu ngetesnya di java SE nih :

      private void btnTesNambahTanggalActionPerformed(java.awt.event.ActionEvent evt) {
          Calendar tgl = Calendar.getInstance(); // ambil tgl sekarang
          
          DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
      
          System.out.println("Sekarang Tanggal : " + df.format(tgl.getTime()));
          
          tgl.add(Calendar.DAY_OF_MONTH, 18); // tambah 18 hari
          System.out.println("18 hari kemudian tanggal : " + df.format(tgl.getTime()));
      }
      

      Selamat mencoba 🙂

      • wahyu widayanto
        August 21, 2011 at 2:36 pm

        ok bang jazzakumullah khairan katsira…..:-)

        • August 22, 2011 at 2:28 am

          Wa iyyakum

  5. pratiwi
    December 11, 2011 at 4:10 pm

    mas bisa minta sourcodenya project contoh diatas gak ya? soalnya banyak errornya.
    terus method ini ambilnya dari mana error trs.

    MsgInfo(” “);
    KosongkanInputan();

    terimakasih

    • December 11, 2011 at 7:42 pm

      Udah ada kok mba link downloadnya diatas, coba dicek lagi.

  6. pratiwi
    December 12, 2011 at 6:17 am

    Makasih banyak Mas,terimaksaih bantuannya dan sdh jalan mas,trs mau buat reportnya crystal report msh bingung

  7. DevilBoyz
    March 1, 2012 at 1:36 am

    bang mo nanya..
    kalw koneksi 2 atau lebih kmputer dmna salah satunya jadi server jadi komputer laen ngakses database di komputer server tu gmna ya??
    tolong dijawab bang, bru blajar C#

    • March 1, 2012 at 7:51 am

      Ya tinggal disebutin aja om ip servernya dibagian koneksi string

      SERVER=nama_server;DATABASE=nama_database;UID=user_database;PASSWORD=user_password
      
  8. fajrin_zamzam
    April 7, 2012 at 6:22 pm

    om mau nanya….
    misal kita punya table jual_header dan table jual_detail.. kira2 store procedure insertnya gimana ya dan semua prosesnya dilakukan di server???

    • April 9, 2012 at 4:12 pm

      Nah disini ada tutorial lengkap tentang store procedure di MySQL om, silahkan dicoba dulu 😀

  9. Ferdy Lubara
    June 10, 2012 at 5:05 pm

    om.. mau nanya..
    itu kan nama server & nama db udah di hard code..
    bijimana kita bisa save ke app.config..
    soalnya saya udah buat form dbsetting..
    terima kasih..

    • June 11, 2012 at 12:39 pm

      Loh bukannya sample diatas itu udah pake file app.config om, coba dicek lagi deh.

  10. wildan
    June 27, 2012 at 1:36 pm

    assalamualaikum bang bisa tolong bantu saya bikinin aplikasi presensi mahasiswa dengan C# dan SQL server ga??apa ada modulnya gtu..tolong bgt bang

    • June 28, 2012 at 3:46 pm

      Waalaikumussalam
      Enggak punya om

  11. Desi
    July 17, 2012 at 4:26 am

    thanks bg atas informasiny
    mau tanya bg, gmn jika menghubungkan databasenya dgn IP fingerprint ?
    IP : 192.168.1.25

    • July 21, 2012 at 9:35 am

      Ya bukannya tinggal download data presensi yg ada di mesin fingerprint trus diinsertkan ke tabel.

      Setiap pembelian fingerprint kan sudah ada SDK untuk mendownload data presensinya.

      • December 3, 2012 at 1:20 pm

        trimakasih banyak bang…mau tanya klo untuk validasi Numeric gmana ya bang.

        • December 7, 2012 at 4:17 pm

          Coba disini om.

  12. December 8, 2012 at 12:43 pm

    Min…

    Ane kan buat aplikasi untuk input data di website lewat winform, pas ane coba di localhost itu berhasil, terus databasenya ane masukin ke mysql yang di cpanel pas ane coba aplikasinya lagi koq databasenya ga bisa ke akses ya ?

    Nama servernya di sesuain sama ip address websitnya kan ?

    mohon pencerahannya…

    • December 8, 2012 at 2:21 pm

      jangan2x port mysqlnya msh keblok

      • December 8, 2012 at 9:08 pm

        Cara cek ke block atau ga gimana ya ?

  13. Havizul
    January 17, 2014 at 1:38 pm

    class FrmMahasiswa.cs :

    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 daftarMhs = mhsDao.GetAll();
    foreach (Mahasiswa mhs in daftarMhs)
    {
    FillToListView(mhs); // panggil method FillToListView
    }
    }

    Class MahasiswaDAO.cs :

    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 GetAll()
    {
    List daftarMhs = new List();

    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;
    }

    Mas script diatas berasal dari class MahasiswaDAO dan frmMahasiswa, untuk menampilkan record dalam database ke Listview. Prosesnya adalah fungsi di class frmMahasiswa (“List daftarMhs = mhsDao.GetAll();”) akan memanggil/mengakses fungsi di class MahasiswaDAO (“mhsDao.GetAll()”). Fungsi GetAll() tersebut akan mengambil semua record di database dan setiap record/baris tsb akan disimpan di setiap new object mahasiswa.cs yang dibentuk. Kemudian fungsi getall() ini akan mengembalikan nilai ke class frmMahasiswa.cs berupa array daftarMhs yang telah berisi object2 class Mahasiswa.cs beserta nilai2 yang dibawanya.

    Jadi prosesnya adalah class MahasiswaDao.cs akan membaca database dan menyimpan setiap record database ke dalam class Mahasiswa.cs. Kemudian mengembalikan nilai array List ke class frmMahasiswa.cs, kemudian dari class frmMahasiswa.cs akan membaca record2 database di class Mahasiswa.cs, kemudian baru menampilkannya di Listview.

    Saya mengganti Listview dengan DataGridView. Saya menggunakan Dataset. Saya menambahkan namespace utk dataset di class frmMahasiswa.cs dan class MahasiswaDao.cs. Namun script saya ini utk menampilkan record database ke Datagridview tidak melewati class Mahasiswa.cs lagi, jadi class MahasiswaDao.cs langsung mengembalikan nilai ber tipe dataset ke class frmMahasiswa.cs, kemudian frmMahasiswa.cs langsung menampilkan nya ke Datagridview. Apakah dalam implementasi DAO dan model pemrograman Model-View-DAO cara ini dapat dibenarkan ? Karena dalam kasus ini class Mahasiswa.cs menjadi diabaikan.
    Mohon penjelasannya.

    Berikut script saya (Saya menggunakan Class Golongan.cs, frmGolongan.cs, GolonganDAO.cs, dan database mysql dengan tabel Golongan) :

    class frmGolongan.cs :
    private void LoadDataGolongan()
    {
    DataSet ds = glgDAO.GetAll();
    DGV.DataSource = ds;
    DGV.DataMember = “Golongan”;
    DGV.ReadOnly = true;
    }

    class GolonganDAO.cs :
    public DataSet GetAll()
    {
    MySqlDataAdapter da = new MySqlDataAdapter(“SELECT * FROM Golongan”, conn);
    DataSet ds = new DataSet();

    ds.Clear();
    da.Fill(ds, “Golongan”);

    return ds;

    }

    Terima kasih mohon penjelasannya ….

    • January 17, 2014 at 3:21 pm

      Tidak ada yg salah dg cara yang om gunakan, intinya adalah sy menggunakan class entity (class Mahasiswa) salah satu tujuannya adalah untuk mengurangi tingkat kesalahan dan masalah kinerja aplikasi.

      Sy kasih contoh menggunakan DataReader dan Generic List untuk menampilkan data

      1. DataReader

      2. Generic List

      Om pintar membaca kode program, jadi jangan cukup puas dengan metode akses data yang om gunakan sekarang.

      Zaman sekarang sudah sangat tidak disarankan menggunakan secara langsung class-class ADO .NET seperti Connection, DataSet, DataReader, Command, walaupun masih banyak yang menggunakannya 🙂

      Ada banyak tool2x yg bisa digunakan untuk mengakses database tanpa harus menggunakan class-class ADO .NET yg dikenal dengan istilah ORM.

      Luangkan waktu untuk belajar tool2x ini sy yakin level om sebagai programmer akan mempunyai nilai lebih 🙂

      Oleh karena itu di postingan sy yang terbaru sy sudah mulai menggunakan Micro ORM, ya pelan-pelan pindah ke full ORM, om bisa cek di Micro ORD Dapper .NET

      • Havizul
        January 17, 2014 at 3:37 pm

        Terima kasih mas. Penjelasannya begitu membantu saya yang sedang belajar ini.

      • Havizul
        January 18, 2014 at 3:55 pm

        o iya mas yang ingin saya tanyakan pada kasus saya diatas adalah : apakah bisa teknik generic list di implementasikan untuk datagrid view ? Lantas kalau bisa apa tipe data sebagai data source nya datagrid view ? Atau bagaimana cara memasukkan nilai2 properti dari entiti class (mahasiswa.cs) ? bagaimana mengimplementasikan generic list untuk datagrid view (di contoh program yang mas buat adalah implementasi generic list di listview) ? Saya menggunakan datagrid view karena saya butuh even seperti on keypress, on cell click, dll.

        • January 18, 2014 at 4:19 pm

          Bisa om, property DataSource bisa juga menerima data berupa object collection :

          var daftarGolongan = new List<Golongan>
          {
              new Golongan { golongan_id = 1, nama_golongan = "Golongan 1"},
              new Golongan { golongan_id = 2, nama_golongan = "Golongan 2"},
              new Golongan { golongan_id = 3, nama_golongan = "Golongan 3"}  
          };
                      
          dataGridView1.DataSource = daftarGolongan.ToArray();
          
          • Havizul
            January 18, 2014 at 8:05 pm

            Terima kasih mas. Ini maksud saya. Jadi class Golongan yang saya buat tidak sia2 he2..

          • Havizul
            January 20, 2014 at 10:19 am

            Alhamdulillah mas dah bisa, datasource nya pake daftarGolongan.ToArray(). Saya mau lanjut dulu. Saya sedang bikin aplikasi PayRoll pake C#, sy pake 7 tabel mysql. saya mau implementasi teknik sampean ini. Ntar kalau ada masalah saya tanya lagi ya ?

            He2..

            Trims

            • January 20, 2014 at 10:43 am

              oke om sippp, yg penting jangan2x susah2x nanyanya 🙂

              • Havizul
                January 20, 2014 at 10:50 am

                He2.. sampean kan hebat om ..

      • Havizul
        January 18, 2014 at 8:07 pm

        he2.. maaf mas nanya lagi. Kenapa memakai micro ORM mas ? apakah Micro ORM lebih baik dari Linq To Object ? Bukankah Linq To Object sangat cocok untuk Microsoft Visual Studio ?

        • January 20, 2014 at 9:43 am

          Soalnya saya butuh kecepatan dan mapping objeknya lebih sederhana 🙂

      • Havizul
        January 18, 2014 at 8:20 pm

        Nambahin lagi mas. Kenapa sampean tidak menulis buku saja untuk berbagi ilmu kepada generasi muda ?. Kalau saya liat coding sampean bagus sekali. Codingnya rapi, efisien, dan teknik nya pun bagus pula. Saya belum penah menemui buku pemrograman yang coding nya sebaik ini. Mudah2an sampean bersedia menulis buku pemrograman dengan beberapa seri membahas c#, basic .NET, dan java. Dan jangan lupa he2.., kalau menulis buku, konsep, teori dan implementasinya seimbang, disertai dengan contoh aplikasi real yang singkat padat dan jelas. Kalau sampean nulis buku pemrograman insya Allah saya beli semua seri nya, apa lagi kalau penerbitnya JASAK*M Alhamdulillah saya sangat senang sekali membacanya.

        Thanks

        • January 20, 2014 at 9:45 am

          Ada rencana sih, tapi… belum dalam waktu dekat 😀

      • January 23, 2014 at 1:20 pm

        Mas kenapa zaman sekarang sudah sangat tidak disarankan menggunakan secara langsung class2 ADO .NET ? Apa sebabnya mas ?. Dan kalau kita mengakses database melalui tool2 ORM apakah aplikasi yang kita buat akan mengalami penurunan performance ?

        Terima kasih

  14. Havizul
    January 20, 2014 at 12:41 pm

    Mas, di Visual Basic untuk membolehkan textbox hanya diisi angka saja, saya punya script seperti ini :

    Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
    If e.KeyChar = Chr(13) Then CmdSimpan.Focus()
    If Not ((e.KeyChar >= “0” And e.KeyChar <= "9") Or e.KeyChar = vbBack) Then e.Handled() = True
    End Sub

    Kalau di c# gimana mas ?

    • January 20, 2014 at 1:26 pm

      Saya udah bahas disini om.

      • Havizul
        January 20, 2014 at 1:34 pm

        Ups, ternyata caranya tidak se simple Visual Basic ya mas ?. di VB 1 – 2 baris dah jadi, tapi di c# harus bikin fungsi lagi.
        Tapi gak apa2 mas, saya copas ya, he2..

        Trims

        • January 20, 2014 at 1:43 pm

          Ya harus dijadikan fungsi om, agar tidak mengulang kode yg sama.

          Klo validasinya langsung di ketik di event textbox seperti yg om lakukan jadi boros kode donk.

          Misal om punya 10 textbox yg harus divalidasi angka, berarti om harus copas kode yg sama sebanyak 10 x, klo dijadikan fungsikan tinggal panggil nama fungsinya.

          Trus kalo terjadi perubahan rule misalnya, yg sebelumnya hanya boleh angka trus mau ditambah karakter baru misalkan karakter tambah (+), klo menggunakan cara om berarti harus merubah di sepuluh lokasi, klo menggunakan fungsi kan cukup merubah isi fungsinya.

          • Havizul
            January 20, 2014 at 4:06 pm

            Ok mas, sudah saya jadikan fungsi. Ni pelan2 menyelesaikan coding untuk tabel golongan dulu, kalau udah beres baru baru lanjut tabel2 yang lain.

          • Havizul
            January 21, 2014 at 9:19 am

            Alhamdulillah dah selesai membuat program untuk tabel Golongan (Form Golongan) + Form Menu Utama.

            Tapi ada yang saya masih agak bingung nih ..

          • Havizul
            January 21, 2014 at 9:28 am

            Yang saya agak bingung, di program sampean mas cuma pake satu form (form mahasiswa) (tidak ada form induk). Program saya pake minimal 7 form yang selevel dengan form mahasiswa (7 form semuanya = Child Form), plus form induk (form menu utama = Parent Form). Bingung nya mau menyimpan constructor untuk DBConnection nya :

            public partial class FrmMahasiswa : Form
            {
            private DBConnection conn = null;
            private MahasiswaDao mhsDao = null;

            //Untuk menampung return value operasi CRUD
            private int result = 0;

            //constructor
            public FrmMahasiswa()
            {
            InitializeComponent();

            conn = DBConnection.GetInstance();

            mhsDao = new MahasiswaDao(conn.GetConnection());

            LoadDataMahasiswa();
            }

            Nah script ini (” conn = DBConnection.GetInstance();”) harus saya simpan dimana mas ? Apakah di form menu utama atau di setiap form child ?
            Kalau disimpan di form menu utama (parent form), cr nya gimana mas, sehingga setiap form child juga dapat memanfaatkan parameter “conn” milik parent form ini ?

            Kalau untuk script ini (“mhsDao = new MahasiswaDao(conn.GetConnection());”) saya bisa menduga2 deh, script ini diletakkan di setiap form child kan ? he2..

            Terima kasih mas, mohon bantuannya …

            • January 21, 2014 at 9:15 pm

              Di menu utama juga bisa, kemudian setiap class Form tambahkan constructor baru untuk melewatkan objek connnya

              • Havizul
                January 22, 2014 at 8:23 am

                Maaf mas, di class form Mahasiswa ada “conn = DBConnection.GetInstance()” (yang mana ini sama dengan “conn = new DBConnection” utk local variabel class frmMahasiswa), sehingga membangkitkan constructor di class DBConnection yang berakibat variabel local “conn” milik DBConnection bernilai “new MysqlConnection(strConn)” atau “conn = new MysqlConnection(strConn). Dan fungsi / constructor class DBConnection ini kan dibangkitkan idealnya hanya sekali saja, menurut saya kalau saya menempatkan “conn = DBConnection.GetInstance()” di setiap 7 form child milik saya, maka constructor class DBConnection akan di eksekusi berulang2 setiap ada 7 form child yang di load (Yang artinya dalam setiap sekali program payroll jalan, fungsi ini bisa berkali2 diproses, yaitu : “New .
                conn = new MySqlConnection(strConn); dan conn.Open();”).

                Kalau di setiap form child hanya saya tempatkan “MahasiswaDao(conn.GetConnection());” ini jelas tidak akan bisa karena saya harus menjalankan ini dulu “conn = DBConnection.GetInstance();”. Sekarang kasusnya gini mas, ini (“conn = DBConnection.GetInstance();”) saya jalankan sekali aja, yaitu saya tempatkan di Form Menu Utama, kemudian ini (“MahasiswaDao(conn.GetConnection())” atau “GolonganDao(conn.GetConnection())”) atau “JabatanDao(conn.GetConnection())”) atau utk form child lainnya) saya tempatkan di setiap form child, gimana caranya supaya variabel local “conn” form child bisa mengambil nilai variabel local “conn” class DBConnection.cs, tentunya setelah form menu utama menjalankan “conn = DBConnection.GetInstance()” ?

                Terima kasih
                Maaf mas berbelit2, maklum baru belajar …

                • January 22, 2014 at 8:48 am

                  Ya pembuatan objek connnya dipindah ke form utama.

                  Nah pada saat pembuatan objek form anak lewatkan objek connnya

                  Terakhir yg perlu direvisi di form anaknya adalah dengan menambahkan constructor baru menerima objek connn yang dikirim dari form utam.

  1. April 16, 2014 at 9:14 am
Comments are closed.