Tutorial CRUD C# Sederhana dengan MySql – Studi Kasus Pendataan Nilai Siswa
Mengelola data merupakan hal yang penting dalam pengembangan aplikasi. Oleh karena itu, CRUD (Create, Read, Update, dan Delete) merupakan salah satu operasi dasar yang harus dikuasai oleh seorang developer. Pada artikel ini, kita akan membahas bagaimana membuat aplikasi sederhana menggunakan bahasa pemrograman C# dan database MySQL dengan studi kasus pendataan nilai siswa. Dalam tutorial ini, kita akan mempelajari cara membuat koneksi database, mengambil data, menambahkan data, mengubah data, dan menghapus data menggunakan C# dan MySQL. Mari kita mulai dengan pembahasan pertama, yaitu cara membuat koneksi database.
Membuat Database
Pertama-tama, sebelum kita dapat melakukan operasi CRUD pada data, kita perlu terlebih dahulu membuat database MySQL. saya anggap anda sudah memahami bagaimana cara membuat database di MySql, jika anda kesulitan bisa baca tutorial sebelumnya tentang cara membuat database mysql menggunakan XAMPP.
Untuk memudahkan anda dalam melakukan praktikum studi kasus ini, saya siapkan Query MySql untuk membuat database data_siswa beserta tabelnya, anda cukup copy query berikut kemudian eksekusi pada menu QUERY
--
-- Database: `data_siswa`
--
-- --------------------------------------------------------
--
-- Struktur dari tabel `guru`
--
CREATE TABLE `guru` (
`id` int(4) NOT NULL,
`nama` varchar(100) NOT NULL,
`nip` varchar(25) NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data untuk tabel `guru`
--
INSERT INTO `guru` (`id`, `nama`, `nip`, `created_at`, `updated_at`) VALUES
(1, 'Moh. Shobirin', '19910810 2022122 1 013', NULL, NULL);
-- --------------------------------------------------------
--
-- Struktur dari tabel `mapel`
--
CREATE TABLE `mapel` (
`id` int(4) NOT NULL,
`nama_mapel` varchar(50) NOT NULL,
`kode_mapel` varchar(10) NOT NULL,
`guru_id` int(4) NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data untuk tabel `mapel`
--
INSERT INTO `mapel` (`id`, `nama_mapel`, `kode_mapel`, `guru_id`, `created_at`, `updated_at`) VALUES
(1, 'Produktif RPL', '001', 1, NULL, NULL);
-- --------------------------------------------------------
--
-- Struktur dari tabel `nilai`
--
CREATE TABLE `nilai` (
`id` int(6) NOT NULL,
`siswa_id` int(4) NOT NULL,
`mapel_id` int(3) NOT NULL,
`nilai` int(11) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data untuk tabel `nilai`
--
INSERT INTO `nilai` (`id`, `siswa_id`, `mapel_id`, `nilai`, `created_at`, `updated_at`) VALUES
(1, 1, 1, 90, '2023-03-12 10:23:09', NULL);
-- --------------------------------------------------------
--
-- Struktur dari tabel `siswa`
--
CREATE TABLE `siswa` (
`id` int(4) NOT NULL,
`nama` varchar(150) NOT NULL,
`jenkel` varchar(10) NOT NULL,
`alamat` varchar(255) NOT NULL,
`nohp` varchar(18) NOT NULL,
`jurusan` varchar(15) NOT NULL,
`email` varchar(20) NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data untuk tabel `siswa`
--
INSERT INTO `siswa` (`id`, `nama`, `jenkel`, `alamat`, `nohp`, `jurusan`, `email`, `created_at`, `updated_at`) VALUES
(1, 'A. Syauqi A`la', 'Laki-laki', 'Lajuk Porong', '0812222222', 'RPL', 'syauqi@gmail.com', '2023-03-12 10:22:03', '2023-03-12 10:22:39');
-- --------------------------------------------------------
--
-- Struktur dari tabel `users`
--
CREATE TABLE `users` (
`id` int(4) NOT NULL,
`name` varchar(150) NOT NULL,
`email` varchar(25) NOT NULL,
`email_verified_at` timestamp NULL DEFAULT NULL,
`password` varchar(255) NOT NULL,
`level` varchar(15) NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data untuk tabel `users`
--
INSERT INTO `users` (`id`, `name`, `email`, `email_verified_at`, `password`, `level`, `created_at`, `updated_at`) VALUES
(1, 'Admin', 'admin@gmail.com', '2023-03-11 17:00:00', 'Admin', 'admin', '2023-03-12 10:17:27', '2023-03-12 10:19:04');
-- --------------------------------------------------------
--
-- Stand-in struktur untuk tampilan `vnilai`
-- (Lihat di bawah untuk tampilan aktual)
--
-- --------------------------------------------------------
--
-- Struktur untuk view `vnilai`
--
CREATE VIEW vmapel as SELECT mapel.id, mapel.nama_mapel, mapel.kode_mapel, guru.nama from mapel INNER JOIN guru ON mapel.guru_id=guru.id;
CREATE VIEW vnilai AS select nilai.id, `siswa`.`nama` AS `nama`,`siswa`.`jurusan` AS `jurusan`,`mapel`.`nama_mapel` AS `nama_mapel`,guru.nama as guru,`nilai`.`nilai` AS `nilai` from ((`nilai` join `mapel` on((`mapel`.`id` = `nilai`.`mapel_id`))) join `siswa` on((`siswa`.`id` = `nilai`.`siswa_id`))join guru on guru.id=mapel.id);
--
-- Indexes for dumped tables
--
--
-- Indeks untuk tabel `guru`
--
ALTER TABLE `guru`
ADD PRIMARY KEY (`id`);
--
-- Indeks untuk tabel `mapel`
--
ALTER TABLE `mapel`
ADD PRIMARY KEY (`id`);
--
-- Indeks untuk tabel `nilai`
--
ALTER TABLE `nilai`
ADD PRIMARY KEY (`id`);
--
-- Indeks untuk tabel `siswa`
--
ALTER TABLE `siswa`
ADD PRIMARY KEY (`id`);
--
-- Indeks untuk tabel `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `users_email_unique` (`email`);
--
-- AUTO_INCREMENT untuk tabel yang dibuang
--
--
-- AUTO_INCREMENT untuk tabel `guru`
--
ALTER TABLE `guru`
MODIFY `id` int(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT untuk tabel `mapel`
--
ALTER TABLE `mapel`
MODIFY `id` int(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT untuk tabel `nilai`
--
ALTER TABLE `nilai`
MODIFY `id` int(6) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT untuk tabel `siswa`
--
ALTER TABLE `siswa`
MODIFY `id` int(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT untuk tabel `users`
--
ALTER TABLE `users`
MODIFY `id` int(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;
Sehingga jika query tersebut berhasil dijalankan, akan menghasilkan struktur database seperti pada gambar berikut ini :
Membuat Project pada Aplikasi Visual Studio
Membuat Project Baru Aplikasi Pendataan Nilai Siswa
Langkah pertama dalam membuat aplikasi WinForm adalah dengan membuat project baru di Visual Studio. Setelah membuka Visual Studio, pilih “Create a New Project”.
Kemudian pilih “Windows Forms App (.NET Framework)” dan beri nama project Anda.
Setelah itu, klik “Create” untuk membuat project baru.
Install MySQL Connector .Net menggunakan Nuget pada C#
Step 1: Buka NuGet Package Manager for Solution Klik kanan pada solusi (solution) Anda di Solution Explorer, dan pilih “Manage NuGet Packages for Solution”.
Step 2: Cari MySql.Data Di dalam NuGet Package Manager for Solution, cari paket MySql.Data dengan menggunakan fitur pencarian yang tersedia.
Step 3: Pilih Versi dan Install Pilih versi MySql.Data yang ingin Anda install dan klik tombol “Install” untuk memulai proses instalasi.
Step 4: Memastikan Installasi Selesai Setelah proses instalasi selesai, pastikan referensi “MySql.Data” sudah ada di dalam proyek Anda dengan melihat bagian “References” di Solution Explorer.
Jika MySql data sudah ada di references, artinya anda sudah berhasil install MySql Connector .Net pada Project anda.
Membuat Form untuk Aplikasi Pendataan Nilai Siswa
Untuk memudahkan anda membuat project ini, Desain terlebih dahulu semua Form dari Tabel Master dan Tabel Transaksi dari Database yang sudah dibuat.
Membuat Form Login
Membuat Form Dashboard
Buatlah Layout Form Baru dengan nama Dashboard, kemudian tambahkan komponen berikut ini ke dalam Form Dashboard
Sesuaikan Komponennya dengan tabel Properties berikut Sehingga tampilan Form Dashboard Tampak lebih cantik
Komponen | Property | Value |
Panel1 | Dock | Top |
Size | 1000, 128 | |
BackColor | DarkBlue | |
Panel2 | Dock | Left |
Size | 255, 522 | |
BackColor | PowderBlue | |
Panel3 | Dock | Fill |
BackgroundImage | Gambar pilihan | |
BackgroundImageLayout | Stretch | |
Panel4 | Dock | Left |
BackgroundImage | Logo Sekolah | |
BackgroundImageLayout | Stretch | |
Button1 | Name | btSiswa |
Text | Siswa | |
TextAlign | MiddleLeft | |
BackColor | DeepSkyBlue | |
Font | 12pt | |
Button2 | Name | btGuru |
Text | Guru | |
TextAlign | MiddleLeft | |
BackColor | DeepSkyBlue | |
Font | 12pt | |
Button3 | Name | btMapel |
Text | Mapel | |
TextAlign | MiddleLeft | |
BackColor | DeepSkyBlue | |
Font | 12pt | |
Button4 | Name | btNilai |
Text | Nilai | |
TextAlign | MiddleLeft | |
BackColor | DeepSkyBlue | |
Font | 12pt | |
Button5 | Name | btLogout |
Text | Logout | |
BackColor | Coral | |
Font | 12pt | |
Label 1 | Text | Aplikasi Pendataan Nilai |
Font | 17pt | |
ForeColor | Window | |
Form1 | Text | Dashboard – Aplikasi Pendataan Nilai |
Size | 1022, 706 | |
WindowState | Maximized | |
IsMdiContainer | True | |
Jika Sudah sesuai, hasilnya akan tampak seperti gambar berikut ini
Anda boleh berkreasi sesuai dengan selera anda, saya yakin desain layout kalian jauh lebih bagus daripada yang saya contohkan. 🙂
Membuat Form Siswa
Selanjutnya kita tambahkan Form baru dengan nama Siswa, kemudian sesuaikan komponen pada Form Siswa sesuai Tabel Property berikut ini
Komponen | Property | Value |
Label1 | Text | Cari |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label2 | Text | Nama |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label3 | Text | Jenis Kelamin |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label4 | Text | Alamat |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label5 | Text | No HP |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label6 | Text | |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label2 | Text | Jurusan |
Font | 10pt | |
ForeColor | RoyalBlue | |
Button1 | Name | btInsert |
Text | Insert | |
ForeColor | White | |
BackColor | DodgerBlue | |
Font | 10pt | |
Button2 | Name | btUpdate |
Text | Update | |
ForeColor | White | |
BackColor | DodgerBlue | |
Font | 10pt | |
Button3 | Name | btDelete |
Text | Delete | |
ForeColor | White | |
BackColor | DodgerBlue | |
Font | 10pt | |
Button4 | Name | btCancel |
Text | Insert | |
ForeColor | White | |
BackColor | DodgerBlue | |
Font | 10pt | |
TextBox1 | Name | txtcari |
Font | 10pt | |
TextBox2 | Name | txtnama |
Font | 10pt | |
TextBox3 | Name | txtalamat |
Font | 10pt | |
Multiline | True | |
TextBox4 | Name | txtnohp |
Font | 10pt | |
TextBox5 | Name | txtemail |
Font | 10pt | |
TextBox6 | Name | txtjurusan |
Font | 10pt | |
CheckBox1 | Name | cbkelamin |
Items | Laki-Laki Perempuan |
|
DataGridView1 | Name | dgsiswa |
Jika Sudah sesuai, hasilnya akan tampak seperti gambar berikut ini
Membuat Form Guru
Selanjutnya tambahkan Form baru dengan nama Guru, kemudian sesuaikan desainnya dengan Tabel Property Berikut ini
Komponen | Property | Value |
Label1 | Text | Cari |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label2 | Text | Nama |
Font | 10pt | |
ForeColor | RoyalBlue | |
Label3 | Text | NIP |
Font | 10pt | |
TextBox1 | Name | txtcari |
Font | 10pt | |
TextBox2 | Name | txtnama |
Font | 10pt | |
DataGridView1 | Name | dgguru |
TextBox3 | Name | txtnip |
Font | 10pt |
Membuat Form Mapel
Selanjutnya tambahkan Form baru dengan nama Mapel, kemudian sesuaikan desainnya dengan Tabel Property Berikut ini
Membuat Form Nilai
Yang terakhir tambahkan Form baru dengan nama Nilai, kemudian sesuaikan desainnya dengan Tabel Property Berikut ini