Membuat Aplikasi Desktop dengan CRUD MySQL di C# (.NET Framework) — Panduan Lengkap untuk Pemula!
Halo teman-teman! 👋 Saya Nanda Adisaputra. Di modul ini, kita akan belajar bareng cara membangun aplikasi desktop menggunakan C# (.NET Framework) yang terhubung ke MySQL. Kita bakal eksplorasi konsep pemrograman database serta mengelola data dengan fitur CRUD (Create, Read, Update, Delete) di Windows Forms. Yuk, mulai perjalanan coding kita! 🚀
🎯 Tujuan Pembelajaran
Setelah menyelesaikan modul ini, kalian akan mampu:
✅ Menghubungkan aplikasi desktop C# dengan database MySQL.
✅ Mengembangkan aplikasi CRUD berbasis Windows Forms.
✅ Menampilkan dan mengelola data dalam DataGridView.
✅ Memahami konsep dasar pemrograman berbasis database dalam C#.
Siapkan semangat dan mari mulai belajar!
1. Persiapan Database MySQL
1.1. Instalasi MySQL
- Pastikan MySQL sudah terinstal di komputer. Kamu bisa menggunakan:
- XAMPP (sudah termasuk MySQL dan phpMyAdmin).
- MySQL Server yang diinstal secara terpisah.
2. Untuk mempermudah pengelolaan database, gunakan phpMyAdmin melalui browser.
3. Dengan phpMyAdmin, kamu bisa membuat, mengedit, dan menghapus database tanpa perlu menulis banyak perintah SQL manual.
1.2. Membuat Database dan Tabel
- Buka phpMyAdmin atau MySQL Command Line.
- Jalankan query berikut untuk membuat database:
CREATE DATABASE wisata_semarang;
3. Pilih database yang baru dibuat:
USE wisata_semarang;
4. Buat tabel tempat_wisata untuk menyimpan data wisata:
CREATE TABLE tempat_wisata (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255) NOT NULL,
lokasi VARCHAR(255) NOT NULL,
deskripsi TEXT NOT NULL
);
Menambahkan Data Awal
Agar nanti ada data yang bisa langsung ditampilkan di aplikasi, tambahkan beberapa data awal ke tabel tempat_wisata dengan query berikut:
INSERT INTO tempat_wisata (nama, lokasi, deskripsi) VALUES
('Lawang Sewu', 'Jl. Pemuda, Semarang', 'Bangunan bersejarah peninggalan Belanda.'),
('Sam Poo Kong', 'Jl. Simongan, Semarang', 'Klenteng bersejarah peninggalan Laksamana Cheng Ho.'),
('Kota Lama', 'Semarang', 'Kawasan dengan bangunan bergaya kolonial.');
Sekarang, database wisata dan tabel tempat_wisata siap digunakan!
2. CRUD di Aplikasi Desktop (C#)
2.1. Membuat Project di Visual Studio 2022
Sekarang, kita mulai membuat aplikasi CRUD di C# Windows Forms!
1️⃣ Buka Visual Studio 2022.
2️⃣ Pilih “Create a new project”.
3️⃣ Cari dan pilih Windows Forms App (.NET Framework) — C#.
4️⃣ Klik Next, lalu beri nama proyek, misalnya WisataSemarangCRUD.
5️⃣ Tentukan lokasi penyimpanan proyek, lalu klik Create.
Setelah project dibuat, kita akan menyiapkan koneksi ke database MySQL!
2.2. Menginstal MySql.Data via NuGet Package Manager
Agar aplikasi bisa berkomunikasi dengan MySQL, kita perlu menambahkan MySql.Data ke dalam project. Ikuti langkah-langkah berikut:
1️⃣ Buka Visual Studio 2022.
2️⃣ Klik Tools > NuGet Package Manager > Manage NuGet Packages for Solution.
3️⃣ Pilih tab Browse, lalu ketik MySql.Data di kotak pencarian.
4️⃣ Pilih MySql.Data dari MySQL, lalu klik Install.
5️⃣ Tunggu hingga instalasi selesai.
6️⃣ Pastikan paket sudah terinstal dengan membuka Solution Explorer > Dependencies > Packages dan cek apakah MySql.Data ada dalam daftar.
Sekarang, kita siap menghubungkan aplikasi dengan database MySQL!
2.3. Membuat Koneksi Database
Agar aplikasi bisa berkomunikasi dengan MySQL, kita perlu membuat kelas khusus untuk mengelola koneksi database.
1️⃣ Di Solution Explorer, klik kanan pada proyek, lalu pilih Add > Class.
2️⃣ Beri nama kelas Database.cs, lalu tambahkan kode berikut:
using System;
using System.Data;
using MySql.Data.MySqlClient; // Menggunakan library MySQL Connector untuk C#
namespace WisataSemarangCRUD
{
public class Database
{
private MySqlConnection connection; // Objek koneksi ke database MySQL
// String koneksi ke database MySQL
// Menggunakan readonly agar tidak dapat diubah setelah inisialisasi
private readonly string connectionString = "server=localhost;port=3306;database=wisata_semarang;uid=root;pwd=;";
// Konstruktor untuk menginisialisasi koneksi ke database
public Database()
{
connection = new MySqlConnection(connectionString);
}
// Method untuk mendapatkan objek koneksi MySQL
public MySqlConnection GetConnection()
{
return connection;
}
// Method untuk mengeksekusi query SELECT dan mengembalikan hasil dalam bentuk DataTable
public DataTable ExecuteQuery(string query)
{
DataTable dt = new DataTable(); // Objek untuk menyimpan hasil query
try
{
connection.Open(); // Membuka koneksi ke database
MySqlCommand cmd = new MySqlCommand(query, connection); // Membuat perintah SQL
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd); // Menggunakan adapter untuk mengeksekusi query
adapter.Fill(dt); // Mengisi DataTable dengan hasil query
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
Console.WriteLine("Error: " + ex.Message);
}
finally
{
connection.Close(); // Menutup koneksi setelah operasi selesai
}
return dt; // Mengembalikan hasil query dalam bentuk DataTable
}
// Method untuk mengeksekusi query INSERT, UPDATE, DELETE
// Mengembalikan nilai boolean untuk menunjukkan keberhasilan eksekusi
public bool ExecuteNonQuery(string query)
{
bool success = false; // Variabel untuk menyimpan status keberhasilan
try
{
connection.Open(); // Membuka koneksi ke database
MySqlCommand cmd = new MySqlCommand(query, connection); // Membuat perintah SQL
success = cmd.ExecuteNonQuery() > 0; // Mengeksekusi perintah dan mengecek apakah ada baris yang terpengaruh
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
Console.WriteLine("Error: " + ex.Message);
}
finally
{
connection.Close(); // Menutup koneksi setelah operasi selesai
}
return success; // Mengembalikan status eksekusi query
}
}
}
Penjelasan:
- GetConnection() → Membuka koneksi ke MySQL.
- ExecuteQuery() → Menjalankan query
SELECT
dan mengembalikan hasil dalam DataTable. - ExecuteNonQuery() → Menjalankan query
INSERT
,UPDATE
, danDELETE
.
Dengan kelas ini, kita bisa dengan mudah menjalankan query ke database. Selanjutnya, kita akan membuat fitur CRUD!
2.4. Mendesain Form CRUD
Sekarang, kita akan mendesain tampilan aplikasi agar pengguna bisa melakukan CRUD dengan mudah.
- Klik View, lalu pilih Toolbox. Setelah itu, buka kategori All Windows Forms untuk melihat semua komponen yang tersedia.
2. Tambahkan Komponen Berikut:
Buka Form1.cs [Design], lalu tambahkan komponen dari Toolbox:
✅ Label dengan teks:
- “Nama”
- “Lokasi”
- “Deskripsi”
✅ TextBox dengan properti:
- txtNama → untuk input nama tempat wisata
- txtLokasi → untuk input lokasi
- txtDeskripsi → untuk input deskripsi
✅ Button untuk mengelola data:
- btnTambah (Teks: Tambah)
- btnUpdate (Teks: Update)
- btnHapus (Teks: Hapus)
✅ DataGridView untuk menampilkan data:
- Name: dataGridView1
3. Atur Properti Komponen di Properties Window:
📝 TextBox:
- txtDeskripsi → Multiline = True (agar bisa mengetik lebih banyak teks)
📊 DataGridView:
- AutoSizeColumnsMode = Fill (agar kolom otomatis menyesuaikan ukuran)
- ReadOnly = True (agar pengguna tidak bisa mengedit langsung di tabel)
2.4. Menghubungkan Form1.cs
dengan Database
Sekarang, kita akan menghubungkan Form1.cs dengan database wisata_semarang.
Modifikasi Form1.cs
using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient; // Menggunakan library MySQL Connector untuk C#
namespace WisataSemarangCRUD
{
public partial class Form1 : Form
{
// Membuat instance dari class Database untuk mengelola koneksi database
Database db = new Database();
MySqlConnection conn;
// Konstruktor utama untuk Form
public Form1()
{
InitializeComponent(); // Inisialisasi komponen UI
}
// Event handler yang dipanggil saat Form pertama kali dimuat
private void Form1_Load(object sender, EventArgs e)
{
try
{
conn = db.GetConnection(); // Mengambil koneksi ke database
LoadData(); // Memuat data ke dalam DataGridView saat form dibuka
}
catch (Exception ex)
{
// Menampilkan pesan error jika gagal terhubung ke database
MessageBox.Show("Gagal menghubungkan ke database: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Method untuk memuat data dari database ke DataGridView
private void LoadData()
{
try
{
string query = "SELECT * FROM tempat_wisata"; // Query untuk mengambil semua data dari tabel tempat_wisata
DataTable dt = db.ExecuteQuery(query); // Menjalankan query dan menyimpan hasilnya dalam DataTable
dataGridView1.DataSource = dt; // Menampilkan data di DataGridView
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan saat memuat data
MessageBox.Show("Terjadi kesalahan saat memuat data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
2.5. Fungsi Menampilkan Data
Fungsi Menampilkan Data digunakan untuk mengambil dan menampilkan data dari database MySQL ke dalam DataGridView pada aplikasi Windows Forms. Dengan fitur ini, pengguna dapat melihat daftar tempat wisata yang telah tersimpan dalam database secara real-time.
Alur Kerja Fungsi Menampilkan Data:
- Menghubungkan ke Database:
- Aplikasi akan membuat koneksi ke database MySQL menggunakan objek MySqlConnection.
2. Menjalankan Query SELECT:
- Sistem akan mengeksekusi perintah SELECT * FROM tempat_wisata untuk mengambil semua data dari tabel tempat_wisata.
3. Memasukkan Data ke DataTable:
- Hasil query akan dimasukkan ke dalam objek DataTable agar bisa diolah lebih lanjut.
4. Menampilkan Data ke DataGridView:
- Data dari DataTable ditampilkan di DataGridView, sehingga pengguna bisa melihat informasi tempat wisata secara terstruktur.
Manfaat Fungsi Ini:
✅ Memungkinkan pengguna melihat data secara langsung dalam tampilan tabel.
✅ Memudahkan pencarian dan pengelolaan data tanpa harus mengakses database secara manual.
✅ Memastikan data yang ditampilkan selalu terbaru setelah pengguna melakukan perubahan.
// Method untuk memuat data dari database ke DataGridView
private void LoadData()
{
try
{
string query = "SELECT * FROM tempat_wisata"; // Query untuk mengambil semua data dari tabel tempat_wisata
DataTable dt = db.ExecuteQuery(query); // Menjalankan query dan menyimpan hasilnya dalam DataTable
dataGridView1.DataSource = dt; // Menampilkan data di DataGridView
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan saat memuat data
MessageBox.Show("Terjadi kesalahan saat memuat data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Sekarang, kita akan memanggil fungsi LoadData() di dalam Form1_Load agar data langsung ditampilkan saat aplikasi dijalankan.
// Event handler yang dipanggil saat Form pertama kali dimuat
private void Form1_Load(object sender, EventArgs e)
{
try
{
conn = db.GetConnection(); // Mengambil koneksi ke database
LoadData(); // Memuat data ke dalam DataGridView saat form dibuka
}
catch (Exception ex)
{
// Menampilkan pesan error jika gagal terhubung ke database
MessageBox.Show("Gagal menghubungkan ke database: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
2.6. Fungsi Tambah Data
Fungsi Tambah Data digunakan untuk menyimpan data baru ke dalam database MySQL melalui aplikasi Windows Forms. Dengan fitur ini, pengguna dapat menambahkan informasi tempat wisata secara langsung melalui antarmuka aplikasi.
Alur Kerja Fungsi Tambah Data:
- Mengisi Form Input:
- Pengguna memasukkan data ke dalam TextBox (Nama, Lokasi, dan Deskripsi).
2. Validasi Input:
- Sistem memastikan semua kolom telah diisi sebelum data dikirim ke database.
3. Eksekusi Query INSERT:
- Jika validasi berhasil, sistem akan menjalankan perintah INSERT INTO tempat_wisata (nama, lokasi, deskripsi) VALUES (‘…’, ‘…’, ‘…’).
4. Konfirmasi Penyimpanan:
- Jika data berhasil disimpan, sistem akan menampilkan notifikasi keberhasilan.
5. Pembaruan Tampilan:
- Data yang baru ditambahkan akan langsung ditampilkan di DataGridView.
6. Reset Form Input:
- Setelah data berhasil ditambahkan, kolom input dikosongkan kembali agar siap digunakan untuk entri data berikutnya.
Manfaat Fungsi Ini:
✅ Memudahkan pengguna menambahkan data baru dengan cepat dan efisien.
✅ Mencegah kesalahan input melalui sistem validasi otomatis.
✅ Menampilkan data terbaru secara langsung tanpa perlu me-restart aplikasi.
// Event handler untuk tombol Tambah
private void BtnTambah_Click(object sender, EventArgs e)
{
try
{
// Query untuk menambahkan data baru ke database
string query = $"INSERT INTO tempat_wisata (nama, lokasi, deskripsi) VALUES ('{txtNama.Text}', '{txtLokasi.Text}', '{txtDeskripsi.Text}')";
if (db.ExecuteNonQuery(query)) // Menjalankan query dan memeriksa apakah data berhasil ditambahkan
{
MessageBox.Show("Data berhasil ditambahkan!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah penambahan
ResetForm(); // Mengosongkan input form setelah penambahan
}
else
{
MessageBox.Show("Gagal menambahkan data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat menambahkan data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Jika ada error Itu berarti event handler textBox1_TextChanged
masih terdaftar di Form1.Designer.cs, tapi method-nya sudah dihapus atau namanya berubah.
Solusi
Hapus Event Handler di Designer
- Buka
Form1.Designer.cs
- Cari kode seperti ini:
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
Hapus baris tersebut atau beri komentar //
.
Jika tombol Tambah belum berfungsi, klik kanan pada tombol tersebut, lalu pilih Properties. Setelah itu, klik ikon Events yang berbentuk petir (⚡), cari event Click, lalu pilih btnTambah_Click dari daftar yang tersedia. Tekan Enter untuk menyimpan perubahan, dan tombol Tambah siap digunakan.
2.7. Fungsi Update Data
Fungsi Update Data digunakan untuk memperbarui informasi yang telah tersimpan di database MySQL melalui aplikasi Windows Forms. Dengan fitur ini, pengguna dapat mengedit data tanpa harus menghapus dan menambah ulang.
Alur Kerja Fungsi Update Data:
- Memastikan Data Dipilih:
- Sistem memeriksa apakah pengguna telah memilih baris data di DataGridView.
2. Menampilkan Data ke Form Input:
- Ketika baris diklik, data akan otomatis ditampilkan di TextBox untuk diedit.
3. Validasi Input:
- Jika ada kolom yang kosong, sistem akan tetap menggunakan data lama agar tidak terjadi kehilangan informasi.
4. Konfirmasi Pembaruan:
- Sebelum data diperbarui, sistem akan meminta konfirmasi dari pengguna.
5. Eksekusi Query UPDATE:
- Jika disetujui, sistem akan menjalankan perintah UPDATE tempat_wisata SET nama = ‘…’, lokasi = ‘…’, deskripsi = ‘…’ WHERE id = ….
6. Pembaruan Tampilan:
- Setelah pembaruan berhasil, DataGridView diperbarui untuk menampilkan data terbaru.
Manfaat Fungsi Ini:
✅ Memungkinkan pengguna memperbarui data tanpa menghapusnya.
✅ Mengurangi risiko kehilangan data dengan sistem validasi otomatis.
✅ Memastikan tampilan data selalu terkini tanpa perlu restart aplikasi.
// Event handler untuk tombol Update/Edit
private void btnUpdate_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.SelectedRows.Count > 0) // Memastikan ada data yang dipilih
{
int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); // Mengambil ID data yang dipilih
// Query untuk memperbarui data berdasarkan ID
string query = $"UPDATE tempat_wisata SET nama='{txtNama.Text}', lokasi='{txtLokasi.Text}', deskripsi='{txtDeskripsi.Text}' WHERE id={id}";
if (db.ExecuteNonQuery(query)) // Menjalankan query update
{
MessageBox.Show("Data berhasil diperbarui!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah update
ResetForm(); // Mengosongkan input form
}
else
{
MessageBox.Show("Gagal memperbarui data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Pilih data yang ingin diperbarui!", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat memperbarui data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Jika tombol Update belum berfungsi, klik kanan pada tombol tersebut, lalu pilih Properties. Setelah itu, klik ikon Events yang berbentuk petir (⚡), cari event Click, lalu pilih btnUpdate_Click dari daftar yang tersedia. Tekan Enter untuk menyimpan perubahan, dan tombol Update siap digunakan.
2.8. Fungsi Hapus Data
Fungsi hapus data digunakan untuk menghapus entri yang tersimpan dalam database MySQL melalui aplikasi Windows Forms. Dalam implementasinya, pengguna akan memilih data yang ingin dihapus dari DataGridView, lalu menekan tombol Hapus untuk mengonfirmasi penghapusan.
Alur Kerja Fungsi Hapus Data:
- Memastikan Data Dipilih:
- Sistem akan memeriksa apakah ada baris yang dipilih di DataGridView
2. Konfirmasi Penghapusan:
- Sebelum menghapus, sistem menampilkan kotak dialog untuk meminta konfirmasi pengguna.
3. Eksekusi Query DELETE:
- Jika pengguna menyetujui, sistem akan menjalankan perintah DELETE FROM tempat_wisata WHERE id = (id yang dipilih).
4. Pembaruan Tampilan:
- Setelah penghapusan berhasil, DataGridView diperbarui untuk merefleksikan perubahan.
Manfaat Fungsi Ini:
✅ Memungkinkan pengguna menghapus data yang sudah tidak diperlukan.
✅ Mencegah kesalahan penghapusan dengan sistem konfirmasi.
✅ Memastikan tampilan data selalu diperbarui secara real-time.
// Event handler untuk tombol Hapus
private void btnHapus_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.SelectedRows.Count > 0) // Memastikan ada data yang dipilih
{
int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); // Mengambil ID data yang dipilih
// Query untuk menghapus data berdasarkan ID
string query = $"DELETE FROM tempat_wisata WHERE id={id}";
if (db.ExecuteNonQuery(query)) // Menjalankan query delete
{
MessageBox.Show("Data berhasil dihapus!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah penghapusan
ResetForm(); // Mengosongkan input form
}
else
{
MessageBox.Show("Gagal menghapus data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Pilih data yang ingin dihapus!", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat menghapus data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Jika tombol Hapus belum berfungsi, klik kanan pada tombol tersebut, lalu pilih Properties. Setelah itu, klik ikon Events yang berbentuk petir (⚡), cari event Click, lalu pilih btnHapus_Click dari daftar yang tersedia. Tekan Enter untuk menyimpan perubahan, dan tombol Hapus siap digunakan.
Memilih Data dari DataGridView ke Form Input
Saat pengguna mengklik salah satu baris di DataGridView, data dari baris tersebut akan otomatis dimasukkan ke dalam TextBox untuk diedit. Ini memungkinkan pengguna memperbarui atau menghapus data dengan mudah.
Langkah-langkahnya:
- Pastikan DataGridView memiliki data yang diambil dari database.
- Buat event handler untuk klik pada DataGridView menggunakan event
CellClick
. - Ambil data dari baris yang diklik dan masukkan ke dalam
TextBox
. - Tambahkan error handling untuk mencegah kesalahan saat mengklik sel yang kosong.
Kode Program:
// Event handler untuk klik pada DataGridView untuk mengisi data ke form input
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.RowIndex >= 0) // Memastikan indeks baris valid
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
txtNama.Text = row.Cells["nama"].Value.ToString();
txtLokasi.Text = row.Cells["lokasi"].Value.ToString();
txtDeskripsi.Text = row.Cells["deskripsi"].Value.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show("Terjadi kesalahan saat memilih data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
2. Mereset Form Input
Ketika pengguna selesai mengedit atau menambahkan data, sering kali diperlukan tombol Reset untuk mengosongkan input. Ini mencegah kesalahan input saat pengguna ingin menambah data baru.
Langkah-langkahnya:
- Buat method
ResetForm
untuk mengosongkanTextBox
. - Gunakan method ini setelah menambah atau memperbarui data.
- Tambahkan error handling agar tidak terjadi crash jika
TextBox
bermasalah.
Kode Program:
// Method untuk mereset input form
private void ResetForm()
{
try
{
txtNama.Clear();
txtLokasi.Clear();
txtDeskripsi.Clear();
}
catch (Exception ex)
{
MessageBox.Show("Terjadi kesalahan saat mereset form: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Kode Lengkap CRUD Wisata Semarang dengan MySQL di VB.Net
using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace WisataSemarangCRUD
{
public partial class Form1 : Form
{
// Membuat instance dari class Database untuk mengelola koneksi database
Database db = new Database();
MySqlConnection conn;
// Konstruktor utama untuk Form
public Form1()
{
InitializeComponent(); // Inisialisasi komponen UI
}
// Method untuk memuat data dari database ke DataGridView
private void LoadData()
{
try
{
string query = "SELECT * FROM tempat_wisata"; // Query untuk mengambil semua data dari tabel tempat_wisata
DataTable dt = db.ExecuteQuery(query); // Menjalankan query dan menyimpan hasilnya dalam DataTable
dataGridView1.DataSource = dt; // Menampilkan data di DataGridView
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan saat memuat data
MessageBox.Show("Terjadi kesalahan saat memuat data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Event handler yang dipanggil saat Form pertama kali dimuat
private void Form1_Load(object sender, EventArgs e)
{
try
{
conn = db.GetConnection(); // Mengambil koneksi ke database
LoadData(); // Memuat data ke dalam DataGridView saat form dibuka
}
catch (Exception ex)
{
// Menampilkan pesan error jika gagal terhubung ke database
MessageBox.Show("Gagal menghubungkan ke database: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Event handler untuk tombol Tambah
private void BtnTambah_Click(object sender, EventArgs e)
{
try
{
// Query untuk menambahkan data baru ke database
string query = $"INSERT INTO tempat_wisata (nama, lokasi, deskripsi) VALUES ('{txtNama.Text}', '{txtLokasi.Text}', '{txtDeskripsi.Text}')";
if (db.ExecuteNonQuery(query)) // Menjalankan query dan memeriksa apakah data berhasil ditambahkan
{
MessageBox.Show("Data berhasil ditambahkan!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah penambahan
ResetForm(); // Mengosongkan input form setelah penambahan
}
else
{
MessageBox.Show("Gagal menambahkan data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat menambahkan data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Event handler untuk tombol Update/Edit
private void btnUpdate_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.SelectedRows.Count > 0) // Memastikan ada data yang dipilih
{
int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); // Mengambil ID data yang dipilih
// Query untuk memperbarui data berdasarkan ID
string query = $"UPDATE tempat_wisata SET nama='{txtNama.Text}', lokasi='{txtLokasi.Text}', deskripsi='{txtDeskripsi.Text}' WHERE id={id}";
if (db.ExecuteNonQuery(query)) // Menjalankan query update
{
MessageBox.Show("Data berhasil diperbarui!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah update
ResetForm(); // Mengosongkan input form
}
else
{
MessageBox.Show("Gagal memperbarui data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Pilih data yang ingin diperbarui!", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat memperbarui data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Event handler untuk tombol Hapus
private void btnHapus_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.SelectedRows.Count > 0) // Memastikan ada data yang dipilih
{
int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); // Mengambil ID data yang dipilih
// Query untuk menghapus data berdasarkan ID
string query = $"DELETE FROM tempat_wisata WHERE id={id}";
if (db.ExecuteNonQuery(query)) // Menjalankan query delete
{
MessageBox.Show("Data berhasil dihapus!", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadData(); // Memuat ulang data setelah penghapusan
ResetForm(); // Mengosongkan input form
}
else
{
MessageBox.Show("Gagal menghapus data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Pilih data yang ingin dihapus!", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
// Menampilkan pesan error jika terjadi kesalahan
MessageBox.Show("Terjadi kesalahan saat menghapus data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Event handler untuk klik pada DataGridView untuk mengisi data ke form input
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.RowIndex >= 0) // Memastikan indeks baris valid
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
txtNama.Text = row.Cells["nama"].Value.ToString();
txtLokasi.Text = row.Cells["lokasi"].Value.ToString();
txtDeskripsi.Text = row.Cells["deskripsi"].Value.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show("Terjadi kesalahan saat memilih data: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Method untuk mereset input form
private void ResetForm()
{
try
{
txtNama.Clear();
txtLokasi.Clear();
txtDeskripsi.Clear();
}
catch (Exception ex)
{
MessageBox.Show("Terjadi kesalahan saat mereset form: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
Saat program dijalankan, tampilan aplikasi akan menampilkan form dengan input untuk mengisi data tempat wisata, serta tombol untuk menambahkan, memperbarui, dan menghapus data. Data yang telah dimasukkan akan langsung ditampilkan dalam tabel DataGridView seperti pada gambar berikut. Dengan tampilan ini, pengguna dapat dengan mudah mengelola data tempat wisata secara interaktif.
Setelah sukses membangun aplikasi desktop dengan database MySQL, kita nggak berhenti di sini! Di tutorial berikutnya, kita bakal lanjut ke level berikutnya: menghubungkan database ini ke aplikasi Android menggunakan Kotlin dengan arsitektur MVVM. Jadi, siapkan semangatmu, karena perjalanan coding kita masih panjang dan makin seru! Sampai jumpa di part selanjutnya!