Bu dersimizde C# ile MySQL veritabanı bağlantısı kurarak temel veritabanı işlemlerini, yani listeleme, kayıt ekleme, kayıt güncelleme ve kayıt silme işlemlerini (Select, Insert, Update, Delete) gerçekleştireceğiz.
Örneğimizde hazır bir veritabanı kullanacağız. Eğer MySQL veritabanı ve tablo oluşturma konusunda bilgi almak isterseniz buradaki videoyu izlemenizi öneririm.
C# ile MySQL veritabanı kurmak için MySql.Data Referensını projemize eklememiz gerekmektedir. Bu işlemi iki farklı şekilde çözebiliriz.
Bu yöntemlerden ilk olanını C# MySql Bağlantısı Kurmak İçin Reference Ekleme konusunda bulabilirsiniz.
Diğer yöntem olarak ise NuGet Paket Yöneticisini kullanabiliriz. Biz bu örneğimizde Nugetbu yöntemi kullanacağız.
Örneğimizi oluştururken ben Visual Studio 2022 kullanacağım. Ancak diğer Visual Studio sürümlerindede aynı işlemleri gerçekleştirebilirsiniz.
Örneğimize başlayalım.
İlk olarak veritabanımız ve kullanacağımız tablo;
Yukarıdaki görselde gördüğünüz kutuphane veritabanı ve içindeki ogrenci tablosunu kullanacağız.
Adım adım projemizi gerçekleştirelim.
Adım 1: Yeni bir Windows Form projesi açalım. Projenize istediğiniz ismi verebilirsiniz. Form tasarımını aşağıdaki gibi oluşturalım. (1 adet DataGridView, 3 adet Button, 5 adet TextBox,1 adet ComboBox,1 adet DateTimePicker ve 2 adet RadioButton.)
Eklediğimiz denetimlerin Name özelliklerini;
dataGridView1 >> dgvOgrenci
textBox1 >> txtAra
textBox2 >> txtNo
textBox3 >> txtAd
textBox4 >> txtSoyad
textBox5 >> txtPuan
comboBox1 >> cmbSinif
radioButton1>> rbKiz
radioButton2>> rbErkek
button1>> btnEkle
button2 >> btnSil
button3 >> btnGuncelle
dateTimePicker1 >> dtpDogumTarih
olarak değiştirin.
Adım 2: cmbSinif ComboBox denetimi için verileri girin.
Adım 3: Solution Explorer penceresinde proje üzerinde sağ tıklayarak Manage NuGet Packages tıklayın.
Açılan pencerede Browse sekmesinde MySql araması yaparak aşağıdaki paketin kurulumunu yapın.
Bu işlem sonucunda MySql.Data referansı projenize eklenmiş olacaktır.
Adım 4:
Aşağıdaki kod satırını üst bölüme ekleyin.
1 2 3 | using MySql.Data.MySqlClient; |
Adım 5: Bağlantı için kullanacağımız aşağıdaki nesneleri ve değişkenleri global olarak oluşturun.
1 2 3 4 5 6 7 8 | MySqlConnection conn = new MySqlConnection("Server=localhost;Database=kutuphane;Uid=root;Pwd='';"); MySqlCommand cmd; MySqlDataAdapter adapter; DataTable dt; string cinsiyet; //radioButtonlardan seçilen cinsiyeti tek karakter olarak tutacağız. |
MySql bağlantı cümlesi örneği:
Server=localhost;Database=veritabanı-ismi;Uid=kullanıcı-adınız;Pwd=şifreniz;
Adım 6: DataGridView içinde verileri çekmek için kullanacağımız kodları metot olarak tanımlayalım. Bu metot diğer işlemler sonucu (ekleme, silme, güüncelleme) çağrılarak güncel olması sağlanacaktır.
1 2 3 4 5 6 7 8 9 10 11 | void VeriGetir() { dt=new DataTable(); conn.Open(); adapter = new MySqlDataAdapter("SELECT *FROM ogrenci", conn); adapter.Fill(dt); dgvOgrenci.DataSource = dt; conn.Close(); } |
Adım 7: Form_Load için kodlarımız:
1 2 3 4 5 6 7 8 9 | private void Form1_Load(object sender, EventArgs e) { this.Text = "yazilimkodlama.com"; VeriGetir(); rbKiz.Checked = true; //Kız seçeneği ilk açılışta seçili olarak gelecektir. txtNo.Enabled = false; } |
Adım 8: Cinsiyet seçimi için gerekli değerin değişkene aktarılması için kodları oluşturun.
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void rbKiz_CheckedChanged(object sender, EventArgs e) { cinsiyet = "K"; //Kız seçeneği tıklandığında global olarak tanımlanan //cinsiyet değişkeni içine K atanacaktır. } private void rbErkek_CheckedChanged(object sender, EventArgs e) { cinsiyet = "E"; //Erkek seçeneği tıklandığında global olarak tanımlanan //cinsiyet değişkeni içine E atanacaktır. } |
Adım 9: DatagridView tıklanan satır bilgilerinin ilgili denetimlere aktarılması için kodları oluşturun.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | private void dgvOgrenci_CellEnter(object sender, DataGridViewCellEventArgs e) { try { txtNo.Text = dgvOgrenci.CurrentRow.Cells[0].Value.ToString(); txtAd.Text = dgvOgrenci.CurrentRow.Cells[1].Value.ToString(); txtSoyad.Text = dgvOgrenci.CurrentRow.Cells[2].Value.ToString(); string cins = dgvOgrenci.CurrentRow.Cells[3].Value.ToString(); if (cins == "K") { rbKiz.Checked = true; rbErkek.Checked = false; } else { rbKiz.Checked = false; rbErkek.Checked = true; } dtpDogumTarih.Text = dgvOgrenci.CurrentRow.Cells[4].Value.ToString(); cmbSinif.Text = dgvOgrenci.CurrentRow.Cells[5].Value.ToString(); txtPuan.Text = dgvOgrenci.CurrentRow.Cells[6].Value.ToString(); } catch { } } |
Adım 10: Ekle Sil ve Güncelle butonları için kodları oluşturun.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | private void btnEkle_Click(object sender, EventArgs e) { string sorgu = "Insert into ogrenci (ograd,ogrsoyad,cinsiyet,dtarih,sinif,puan) values (@ad,@soyad,@cinsiyet,@dtarih,@sinif,@puan)"; cmd=new MySqlCommand(sorgu,conn); cmd.Parameters.AddWithValue("@ad",txtAd.Text); cmd.Parameters.AddWithValue("@soyad",txtSoyad.Text); cmd.Parameters.AddWithValue("@cinsiyet",cinsiyet); cmd.Parameters.AddWithValue("@dtarih",dtpDogumTarih.Value); cmd.Parameters.AddWithValue("@sinif",cmbSinif.Text); cmd.Parameters.AddWithValue("@puan",Convert.ToInt32(txtPuan.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt Eklendi."); } private void btnSil_Click(object sender, EventArgs e) { string sql = "Delete From ogrenci Where ogrno=@no"; cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@no", Convert.ToInt32(txtNo.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt silindi."); } private void btnGuncelle_Click(object sender, EventArgs e) { string sql = "UPDATE ogrenci " + "SET ograd=@ad,ogrsoyad=@soyad,cinsiyet=@cinsiyet,dtarih=@dtarih,sinif=@sinif,puan=@puan" + " WHERE ogrno=@no"; cmd=new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@ad", txtAd.Text); cmd.Parameters.AddWithValue("@soyad",txtSoyad.Text); cmd.Parameters.AddWithValue("cinsiyet", cinsiyet); cmd.Parameters.AddWithValue("@dtarih",dtpDogumTarih.Value); cmd.Parameters.AddWithValue("@sinif",cmbSinif.Text); cmd.Parameters.AddWithValue("@puan", Convert.ToInt32(txtPuan.Text)); cmd.Parameters.AddWithValue("@no", Convert.ToInt32(txtNo.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt güncellendi."); } |
Adım 11: txtAra Text_Changed olayına filtreleme için gerekli kodları yazın.
1 2 3 4 5 6 7 8 | private void txtAra_TextChanged(object sender, EventArgs e) { DataView dv = dt.DefaultView; dv.RowFilter = "ograd LIKE '" + txtAra.Text + "%'"; dgvOgrenci.DataSource = dv; } |
Kodlarımızın tamamı ve ekran çıktısı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace mysql_crud { public partial class Form1 : Form { MySqlConnection conn = new MySqlConnection("Server=localhost;Database=kutuphane;Uid=root;Pwd='';"); MySqlCommand cmd; MySqlDataAdapter adapter; DataTable dt; string cinsiyet; //radioButtonlardan seçilen cinsiyeti tek karakter olarak tutacağız. public Form1() { InitializeComponent(); } void VeriGetir() { dt=new DataTable(); conn.Open(); adapter = new MySqlDataAdapter("SELECT *FROM ogrenci", conn); adapter.Fill(dt); dgvOgrenci.DataSource = dt; conn.Close(); } private void Form1_Load(object sender, EventArgs e) { this.Text = "yazilimkodlama.com"; VeriGetir(); rbKiz.Checked = true; //Kız seçeneği ilk açılışta seçili olarak gelecektir. txtNo.Enabled = false; } private void rbKiz_CheckedChanged(object sender, EventArgs e) { cinsiyet = "K"; //Kız seçeneği tıklandığında global olarak tanımlanan //cinsiyet değişkeni içine K atanacaktır. } private void rbErkek_CheckedChanged(object sender, EventArgs e) { cinsiyet = "E"; //Erkek seçeneği tıklandığında global olarak tanımlanan //cinsiyet değişkeni içine E atanacaktır. } private void dgvOgrenci_CellEnter(object sender, DataGridViewCellEventArgs e) { try { txtNo.Text = dgvOgrenci.CurrentRow.Cells[0].Value.ToString(); txtAd.Text = dgvOgrenci.CurrentRow.Cells[1].Value.ToString(); txtSoyad.Text = dgvOgrenci.CurrentRow.Cells[2].Value.ToString(); string cins = dgvOgrenci.CurrentRow.Cells[3].Value.ToString(); if (cins == "K") { rbKiz.Checked = true; rbErkek.Checked = false; } else { rbKiz.Checked = false; rbErkek.Checked = true; } dtpDogumTarih.Text = dgvOgrenci.CurrentRow.Cells[4].Value.ToString(); cmbSinif.Text = dgvOgrenci.CurrentRow.Cells[5].Value.ToString(); txtPuan.Text = dgvOgrenci.CurrentRow.Cells[6].Value.ToString(); } catch { } } private void btnEkle_Click(object sender, EventArgs e) { string sorgu = "Insert into ogrenci (ograd,ogrsoyad,cinsiyet,dtarih,sinif,puan) values (@ad,@soyad,@cinsiyet,@dtarih,@sinif,@puan)"; cmd=new MySqlCommand(sorgu,conn); cmd.Parameters.AddWithValue("@ad",txtAd.Text); cmd.Parameters.AddWithValue("@soyad",txtSoyad.Text); cmd.Parameters.AddWithValue("@cinsiyet",cinsiyet); cmd.Parameters.AddWithValue("@dtarih",dtpDogumTarih.Value); cmd.Parameters.AddWithValue("@sinif",cmbSinif.Text); cmd.Parameters.AddWithValue("@puan",Convert.ToInt32(txtPuan.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt Eklendi."); } private void btnSil_Click(object sender, EventArgs e) { string sql = "Delete From ogrenci Where ogrno=@no"; cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@no", Convert.ToInt32(txtNo.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt silindi."); } private void btnGuncelle_Click(object sender, EventArgs e) { string sql = "UPDATE ogrenci " + "SET ograd=@ad,ogrsoyad=@soyad,cinsiyet=@cinsiyet,dtarih=@dtarih,sinif=@sinif,puan=@puan" + " WHERE ogrno=@no"; cmd=new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@ad", txtAd.Text); cmd.Parameters.AddWithValue("@soyad",txtSoyad.Text); cmd.Parameters.AddWithValue("cinsiyet", cinsiyet); cmd.Parameters.AddWithValue("@dtarih",dtpDogumTarih.Value); cmd.Parameters.AddWithValue("@sinif",cmbSinif.Text); cmd.Parameters.AddWithValue("@puan", Convert.ToInt32(txtPuan.Text)); cmd.Parameters.AddWithValue("@no", Convert.ToInt32(txtNo.Text)); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); VeriGetir(); MessageBox.Show("Kayıt güncellendi."); } private void txtAra_TextChanged(object sender, EventArgs e) { DataView dv = dt.DefaultView; dv.RowFilter = "ograd LIKE '" + txtAra.Text + "%'"; dgvOgrenci.DataSource = dv; } } } |
Ekran Çıktısı:
Örneğe ait Video:
Hocam merhaba iyi günler sizden bir ricam var acaba aşağıda yazdığım olayın nasıl yapılacağını anlatan yazı yayınlar mısınız.
Sql veritabanım da olan tarih (gün ile) verisinin gerçek zamanlı her gün azalmasını istiyorum örnek vermem gerekirse,
-Bir abonelik kayıt edildi bugünün tarihi 01.06.2022 abonenin bitiş tarihi 10.06.2022 9 gün sonra üyelik pasife dönüşecek. fakat gerçek zamanlı düşüşü beceremiyorum.