Daha önceki yazılarımızda C# ile veritabanı bağlantısının çeşitli yöntemlerini görmüştük. Bu yazımızda yine bir veritabanı bağlantısı gerçekleştireceğiz. Bu örneğimizde Sql veritabanına bağlanıp Ekleme (insert), Silme (Delete) ve Güncelleme (Update) işlemlerini Class (Sınıf) kullanarak gerçekleştireceğiz. Örneğimize geçelim.
Örneğimizde kullanacağımız SQL veritabanı ismi “dbOkul” ve tablonun ismi “Ogrenci” olacak. Sizde istediğiniz bir veritabanı için uyarlama yapabilirsiniz.
Veritabanı tasarımımızı tamamladıktan sonra Form tasarımını da gerçekleştiriyoruz. Formumuzda verileri listelemek için kullanacağımız 1 adet datagridView kontrolü ve Kayıt Ekleme, Kayıt Silme, Kayıt Güncelleme işlemleri için kullanacağımız Textbox, Label ve Button‘ lar bulunmakta.
Datagridview‘ in SelectionMode özelliğini FullRowSelect olarak ayarlayarak tıklana tüm satırın seçili olmasını sağlayacağız.
Şimdi kodlarımıza geçiyoruz. Öncelikle Projemize 2 tane Class (Sınıf) ekliyeceğiz. Class’ larımızın ismi “Kisi” ve “KisiProvider” olacak.
Class‘ larımızı ekledikten sonra Solution Explorer penceresi görünümü aşağıdaki gibi olacaktır.
Kodlarımız aşağıdaki şekilde olacaktır.
“Kisi.cs” :
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 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SqlClass { class Kisi { int _no; public int No { get { return _no; } set { _no = value; } } string _adi; public string Ad { get { return _adi; } set { _adi = value; } } string _soyadi; public string Soyad { get { return _soyadi; } set { _soyadi = value; } } string _telefonu; public string Telefonu { get { return _telefonu; } set { _telefonu = value; } } } } |
“KisiProvider.cs“:
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 |
using System; using System.Collections.Generic; using System.Data; //Ekle using System.Data.SqlClient; //Ekle using System.Linq; using System.Text; using System.Threading.Tasks; namespace SqlClass { class KisiProvider { SqlConnection con; SqlCommand cmd; public KisiProvider() //Kurucu metot { Baglan(); } public void Baglan() { con = new SqlConnection("server=.; Initial Catalog=dbokul;Integrated Security=SSPI"); cmd = new SqlCommand(); cmd.Connection = con; } public List<Kisi> Listele() { try { List<Kisi> ogrenciListesi = new List<Kisi>(); cmd.CommandText = "Select *From Ogrenci"; cmd.CommandType = CommandType.Text; con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while(reader.Read()) { Kisi k = new Kisi(); k.No = Convert.ToInt32(reader[0].ToString()); k.Ad = reader[1].ToString(); k.Soyad = reader[2].ToString(); k.Telefonu = reader[3].ToString(); ogrenciListesi.Add(k); } return ogrenciListesi; } catch { throw; } finally { if(con!=null) { con.Close(); } } } public void Ekle (Kisi k) { try { cmd.CommandText = "Insert Into Ogrenci (numara,ad,soyad,telefon) Values (" + k.No + ",'" + k.Ad + "','" + k.Soyad + "','" + k.Telefonu + "')"; cmd.CommandType = CommandType.Text; con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { if(con!=null) { con.Close(); } } } public void Guncelle(Kisi eskiKisi,Kisi yeniKisi) { try { cmd.CommandText = "Update Ogrenci SET ad='" + yeniKisi.Ad + "',soyad='" + yeniKisi.Soyad + "',telefon='" + yeniKisi.Telefonu + "' Where numara=" + eskiKisi.No + ""; cmd.CommandType = CommandType.Text; con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { if (con != null) { con.Close(); } } } public void Sil(Kisi k) { try { cmd.CommandText = "Delete From Ogrenci Where numara="+k.No+""; cmd.CommandType = CommandType.Text; con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { if (con != null) { con.Close(); } } } } } |
Veritabanı ile ilgili tüm işlemlerimiz bu iki Sınıf kullanılarak yapılmakta. Anaformumuza yani Form1‘e yazacağımız kodlar ise şu şekilde olacaktır.
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 |
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; namespace SqlClass { public partial class Form1 : Form { KisiProvider kp = new KisiProvider(); public Form1() { InitializeComponent(); } void Listele() //Datagrid listeleme işlemi için metot. { dataGridView1.DataSource = kp.Listele(); } private void Form1_Load(object sender, EventArgs e) { Listele(); } private void button1_Click(object sender, EventArgs e) //Ekleme { Kisi yenikisi = new Kisi(); yenikisi.No = Convert.ToInt32(textBox1.Text); yenikisi.Ad = textBox2.Text; yenikisi.Soyad = textBox3.Text; yenikisi.Telefonu = textBox4.Text; kp.Ekle(yenikisi); Listele(); } private void button2_Click(object sender, EventArgs e) //Silme { Kisi silinecekkisi = new Kisi(); silinecekkisi = (Kisi)dataGridView1.CurrentRow.DataBoundItem; kp.Sil(silinecekkisi); Listele(); } private void button3_Click(object sender, EventArgs e) //Güncelleme { Kisi eskikisi = new Kisi(); eskikisi = (Kisi)dataGridView1.CurrentRow.DataBoundItem; Kisi yenikisi = new Kisi(); yenikisi.Ad = textBox2.Text; yenikisi.Soyad = textBox3.Text; yenikisi.Telefonu = textBox4.Text; kp.Guncelle(eskikisi, yenikisi); Listele(); } private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) {//Datagrid tıklanan satırın ilgili Textbox'larda görüntülenmesi. textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString(); textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString(); textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString(); textBox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString(); } } } |
Kodları incelediğimizde Kisi.cs sınıfının kullanılacak veritabanına göre tasarlandığını görüyoruz. KisiProvider sınıfı ise Listeleme, Ekleme, Silme ve Güncelleme işlemlerini gerçekleştiren Class (Sınıfımız).
Class’ larımızı tamamladıktan sonra geriye kalan tek şey bu Class ları kullanmak. Bu işlemleri de Form1.cs tarafında yapıyoruz.
Kodlarımızı tamamlayıp Projemizi çalıştırdığımızda;
ben 2. class’ı oluşturmadan 1 class içinde güncelleme işlemini yapmak istiyorum ama sürekli hata alıyorum.
C# Class Kullanarak Veritabanı Bağlantısı uygulamasında ekleme ve silme çalışıyor fakat güncelleme çalışmıyor “Gerekli bir veya daha fazla parametre için girilen değer yok.” hatası veriyor
Merhaba.Datagridview‘ in SelectionMode özelliğini FullRowSelect olarak ayarladınız mı?
evet ayarlı ama hala hata veriyor
Projeyi sıkıştırıp yollarsaniz kontrol edebilirim.
Hocam site harika tek eksik yazılan kodlara örnek proje olsa daha güzel olacak istersen gülüp geçersin istersen değerlendirirsin ama olsa daha güzel olur.
Yorumunuz icin teşekkürler. Önerinizi dikkate alacağım.