Mengakses database MySQL menggunakan C# bagian 2
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 🙂
Open Source Project
Kategori
- Continuous Integration (9)
- Database (21)
- Firebird (11)
- MySQL (4)
- SQL Server 2000 (1)
- SQLite (6)
- Freeware (8)
- Jaringan (2)
- Logger (1)
- NuGet (6)
- Testing (1)
- Tools Installer (8)
- Inno Setup (6)
- NSIS (2)
- Uncategorized (17)
- Version Control (1)
- Visual Basic (77)
- Active Report (4)
- Winsock (6)
- Visual Basic .NET (10)
- Visual C# (47)
- .NET Remoting (9)
- Dapper .NET (8)
- Entity Framework (9)
- WCF (1)
- Visual Studio .NET (7)
- Build Events (3)
- Software Testing (4)
Arsip
- July 2018 (1)
- September 2017 (1)
- August 2017 (2)
- April 2017 (1)
- January 2017 (2)
- December 2016 (2)
- November 2016 (1)
- October 2016 (1)
- September 2016 (3)
- August 2016 (1)
- July 2016 (3)
- June 2016 (1)
- March 2016 (1)
- February 2016 (5)
- January 2016 (4)
- October 2015 (1)
- July 2015 (2)
- June 2015 (4)
- May 2014 (1)
- April 2014 (3)
- March 2014 (9)
- June 2013 (1)
- March 2013 (1)
- February 2013 (2)
- January 2013 (2)
- August 2012 (1)
- July 2012 (1)
- June 2012 (1)
- May 2012 (4)
- April 2012 (1)
- March 2012 (2)
- February 2012 (3)
- January 2012 (2)
- December 2011 (3)
- November 2011 (3)
- October 2011 (1)
- September 2011 (2)
- August 2011 (1)
- July 2011 (2)
- June 2011 (4)
- March 2011 (2)
- February 2011 (2)
- January 2011 (4)
- December 2010 (7)
- November 2010 (3)
- October 2010 (3)
- September 2010 (3)
- August 2010 (4)
- July 2010 (3)
- June 2010 (5)
- May 2010 (4)
- April 2010 (8)
- March 2010 (12)
- February 2010 (9)
- January 2010 (23)
- December 2009 (10)
Artikel Favorit
- Menambahkan serial number pada paket instalasi (inno setup)
- Memanfaatkan library IKG untuk membuat aktivasi +Â keygen
- Membuat sms gateway itu gampang, jangan dipersulit !!!
- Source Code
- Belajar Winsock bagian 1 - Intro
- Membuat aktivasi dongle bagian 1 - Simple think
- Membuat aktivasi dongle bagian akhir – 1 dongle untuk semua
- Cara mudah dan gampang membuat aplikasi service dengan VB6
- Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 1
- Input data via grid
Artikel Terbaru
- Membuat jaringan VPN Menggunakan SoftEther VPN Bagian #1
- GitLab CI untuk .NET Developer Bagian #2
- GitLab CI untuk .NET Developer Bagian #1
- Membuat Service SMS Gateway Untuk Engine Gammu
- OpenRetail – Open Source Project for Retail Business
- Membuat Log Aplikasi Menggunakan Log4Net
- Manajemen Perubahan Struktur Database Menggunakan Liquibase
- Build Otomatis Project Visual Basic 6 Menggunakan Jenkins
- Membangun Server CI (Continuous Integration) di Windows untuk Platform .NET Menggunakan Jenkins Bagian #4
- Membangun Server CI (Continuous Integration) di Windows untuk Platform .NET Menggunakan Jenkins Bagian #3
- Membangun Server CI (Continuous Integration) di Windows untuk Platform .NET Menggunakan Jenkins Bagian #2
- Membangun Server CI (Continuous Integration) di Windows untuk Platform .NET Menggunakan Jenkins Bagian #1
Recent Comments
Blog Stats
- 1,135,244 hits
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….
Enggak usah nunggu kelanjutannya om, sample program diatas udah bisa dicoba kok
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.
coba cek privilage usernya om, bisa digunakan untuk login dari komputer lain enggak.
asslmkm..
thnks..sangat bermanfaat
Waalaikumussalam
Ok om tq udah mampir 🙂
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
Om, sy cuma bisa bantu ngetesnya di java SE nih :
Selamat mencoba 🙂
ok bang jazzakumullah khairan katsira…..:-)
Wa iyyakum
mas bisa minta sourcodenya project contoh diatas gak ya? soalnya banyak errornya.
terus method ini ambilnya dari mana error trs.
MsgInfo(” “);
KosongkanInputan();
terimakasih
Udah ada kok mba link downloadnya diatas, coba dicek lagi.
Makasih banyak Mas,terimaksaih bantuannya dan sdh jalan mas,trs mau buat reportnya crystal report msh bingung
Klo crystal report sy sudah lama enggak make, klo untuk referensi mungkin bisa coba link berikut :
1. Professional Crystal Reports for Visual Studio.NET 2nd Editon
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#
Ya tinggal disebutin aja om ip servernya dibagian koneksi string
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???
Nah disini ada tutorial lengkap tentang store procedure di MySQL om, silahkan dicoba dulu 😀
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..
Loh bukannya sample diatas itu udah pake file app.config om, coba dicek lagi deh.
assalamualaikum bang bisa tolong bantu saya bikinin aplikasi presensi mahasiswa dengan C# dan SQL server ga??apa ada modulnya gtu..tolong bgt bang
Waalaikumussalam
Enggak punya om
thanks bg atas informasiny
mau tanya bg, gmn jika menghubungkan databasenya dgn IP fingerprint ?
IP : 192.168.1.25
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.
trimakasih banyak bang…mau tanya klo untuk validasi Numeric gmana ya bang.
Coba disini om.
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…
jangan2x port mysqlnya msh keblok
Cara cek ke block atau ga gimana ya ?
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 ….
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
Terima kasih mas. Penjelasannya begitu membantu saya yang sedang belajar ini.
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.
Bisa om, property DataSource bisa juga menerima data berupa object collection :
Terima kasih mas. Ini maksud saya. Jadi class Golongan yang saya buat tidak sia2 he2..
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
oke om sippp, yg penting jangan2x susah2x nanyanya 🙂
He2.. sampean kan hebat om ..
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 ?
Soalnya saya butuh kecepatan dan mapping objeknya lebih sederhana 🙂
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
Ada rencana sih, tapi… belum dalam waktu dekat 😀
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
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 ?
Saya udah bahas disini om.
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
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.
Ok mas, sudah saya jadikan fungsi. Ni pelan2 menyelesaikan coding untuk tabel golongan dulu, kalau udah beres baru baru lanjut tabel2 yang lain.
Alhamdulillah dah selesai membuat program untuk tabel Golongan (Form Golongan) + Form Menu Utama.
Tapi ada yang saya masih agak bingung nih ..
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 …
Di menu utama juga bisa, kemudian setiap class Form tambahkan constructor baru untuk melewatkan objek connnya
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 …
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.
Ok mas. Terima kasih, saya coba dulu …
Alhamdulillah dah bisa mas. He2.., mantap.
Saya juga dokumentasikan di blog saya biar bisa berbagi bersama : http://havizul.blogspot.com/2014/01/membuat-aplikasi-payroll-menggunakan.html
Oke om sipp 🙂