Mengambil data dari database pada C#
Pada bagian ini, kita akan menggunakan database yang sama dengan bagian sebelumnya yang dapat dibuat dengan query berikut:
#Buat database CREATE DATABASE IF NOT EXISTS kampus; #Aktifkan database USE kampus; #Buat tabel CREATE TABLE IF NOT EXISTS mahasiswa ( id INT PRIMARY KEY AUTO_INCREMENT, namalengkap VARCHAR(100), gender VARCHAR(10), fakultas VARCHAR(50), tanggaldaftar DATETIME, updated DATETIME ) engine=innodb;
Untuk membaca data dari database, terdapat paling tidak dua cara:
Menggunakan DataReader
Untuk menggunakan DataReader, kita memerlukan Connection, Command dan DataReader itu sendiri. Perlu diketahui bahwa DataReader tidak memiliki Constructor. Kita harus mengisi nilai DataReader menggunakan method ExecuteReader pada suatu objek Command. Berikut contoh menggunakan DataReader:
var conn = new MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus"); var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas, tanggaldaftar, updated FROM mahasiswa", conn); //Koneksi harus terbuka untuk menjalankan ExecuteReader conn.Open(); var r = cmd.ExecuteReader(); //Agar jelas, Anda juga bisa menuliskan: //MySqlDataReader r = cmd.ExecuteReader(); //Cek apakah DataReader memiliki baris data if (r.HasRows) { //Method Read mencoba untuk membaca satu baris data dari database //Menghasilkan true jika ada baris data, false apabila tidak ada baris data r.Read(); Console.WriteLine("Data mahasiswa:"); //Membaca data perkolom dengan: r[index kolom / nama kolom] Console.WriteLine(r[0]); //Kolom pertama:id (index 0) Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1) Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2) Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM yyyy")); //Kode di atas langsung mengkonversi data menjadi DateTime, kemudian menjadi string. r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai } //Tutup koneksi setelah selesai membaca data conn.Close();
Properties r, yaitu r.HasRows di dalam kondisi if di atas juga dapat diganti dengan r.Read() jika kita ingin mengecek ada atau tidaknya suatu data sekaligus membaca satu baris data dari database:
if (r.Read()) { Console.WriteLine("Data mahasiswa:"); Console.WriteLine(r[0]); //Kolom pertama: (index 0) Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1) Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2) Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM yyyy")); //Kode di atas langsung mengkonversi data menjadi DateTime, kemudian menjadi string. r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai }
Dan apabila kita ingin membaca seluruh baris data yang ada pada DataReader, kita dapat mengganti if menjadi while. Dan jangan lupa untuk memindahkan perintah r.Close() keluar dari loop while:
while (r.Read()) { Console.WriteLine("Data mahasiswa:"); Console.WriteLine(r[0]); //Kolom pertama: (index 0) Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1) Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2) Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM yyyy")); //Kode di atas langsung mengkonversi data menjadi DateTime, kemudian menjadi string. } r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai
Kita juga dapat memindahkan semua baris data pada DataReader ke dalam suatu DataTable:
var conn = new MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus"); var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas, tanggaldaftar, updated FROM mahasiswa", conn); //Suatu DataTabel baru bernama TabelMahasiswa var dt = new DataTable("TabelMahasiswa"); //Koneksi harus terbuka untuk menjalankan ExecuteReader conn.Open(); var r = cmd.ExecuteReader(); //Baca semua baris data yang dapat diambil dari r ke dalam DataTable dt dt.Load(r); conn.Close(); //Kita dapat menggunakan DataTable meskipun koneksi telah ditutup //Kapanpun kita mau foreach (DataRow baris in dt.Rows) { Console.WriteLine("Data mahasiswa:"); Console.WriteLine(baris[0]); //Kolom pertama:id (index 0) Console.WriteLine(baris["namalengkap"]); //Kolom kedua:namalengkap (index 1) Console.WriteLine(baris.Field<string>(2)); //Kolom ketiga: gender berupa string Console.WriteLine(baris.Field<string>("fakultas")); //Dapat juga menggunakan nama kolom Console.WriteLine(baris.Field<DateTime>("tanggaldaftar").ToString("dd MMMM yyyy")); //Baris di atas langsung mengkonversi data menjadi DateTime, kemudian menjadi string. }
Menggunakan DataAdapter
Menggunakan DataAdapter sebetulnya tidak terlalu berbeda dari contoh DataReader terakhir di atas. Satu kelebihan menggunakan DataAdapter adalah ia secara otomatis membuka dan menutup koneksi:
var conn = new MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus"); var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas, tanggaldaftar, updated FROM mahasiswa", conn); var dt = new DataTable("TabelMahasiswa"); //Buat suatu DataAdapter, dan langsung menugaskan cmd di atas sebagai SelectCommand-nya var adap = new MySqlDataAdapter(cmd); //Baca semua baris dari perintah cmd ke dalam DataTable adap.Fill(dt); foreach (DataRow baris in dt.Rows) { Console.WriteLine("Data mahasiswa:"); Console.WriteLine(baris[0]); //Kolom pertama:id (index 0) Console.WriteLine(baris["namalengkap"]); //Kolom kedua:namalengkap (index 1) Console.WriteLine(baris.Field<string>(2)); //Kolom ketiga: gender berupa string Console.WriteLine(baris.Field<string>("fakultas")); //Dapat juga menggunakan nama kolom Console.WriteLine(baris.Field<DateTime>("tanggaldaftar").ToString("dd MMMM yyyy")); //Baris di atas langsung mengkonversi data menjadi DateTime, kemudian menjadi string. }
Perlu diketahui bahwa selain membaca data dengan method Fill di atas, DataAdapter juga dapat secara otomatis mengupdate baris-baris data yang berubah, menginsert baris-baris baru, dan menghapus baris-baris data yang telah dihapus. Atau dengan kata lain, perubahan yang terjadi pada DataTable dikirim juga secara otomatis ke database server. Semua itu dilakukan hanya dengan satu Method: Update. Akan tetapi penggunaan method tersebut tidak akan dibahas di sini.