Veri tabanından kayıt silme C# Ders 73
Veri tabanından kayıt silme C# Ders 73
Daha fazla bilgi için : www.gorselprogramlama.com
Veri tabanından kayıt silme : Silme işlemi için kullanılan sql kodu delete’dir.
Kullanımı : Delete From tablo ismi Where şart
Ör: Delete From ogrbil Where adi=’ali ‘ –> ogrbil tablosundaki adı ali olan kayıtları siler.Silme işleminde şart bölümüne benzersiz alanları vermeye çalışın.Mesela okul no,tc kimlik,vergi no gibi.
Örnek: textBox5’e girilen nolu kaydı silen programın kodlarını yazalım.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace veritabani_baglanti
{ //Daha fazla bilgi için : www.gorselprogramlama.com
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=data.accdb");
DataTable tablo = new DataTable();
OleDbDataAdapter adtr = new OleDbDataAdapter();
OleDbCommand kmt =new OleDbCommand();
void listele()
{ //Daha fazla bilgi için : www.gorselprogramlama.com
tablo.Clear();
bag.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter("select * From ogrbil", bag);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
adtr.Dispose();
bag.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
listele();
dataGridView1.Columns[0].HeaderText = "No";
dataGridView1.Columns[1].HeaderText = "Adı";
dataGridView1.Columns[2].HeaderText = "Soyadı";
dataGridView1.Columns[3].HeaderText = "Sınıfı";
} //Daha fazla bilgi için : www.gorselprogramlama.com
private void button1_Click(object sender, EventArgs e)
{
bag.Open();
kmt.Connection = bag;
kmt.CommandText = "INSERT INTO ogrbil(nosu,adi,soyadi,sinifi) VALUES ('" +textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
kmt.ExecuteNonQuery();
kmt.Dispose();
bag.Close();
listele();
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
}
private void sil_Click(object sender, EventArgs e)
{
kmt.Connection = bag;
bag.Open();
kmt.CommandText = "delete from ogrbil where nosu='" +textBox5.Text + "'";
kmt.ExecuteNonQuery();
bag.Close();
listele();
textBox5.Clear();
}
}//Daha fazla bilgi için : www.gorselprogramlama.com
}


Örnek: Yukarıdaki yaptğımız örneğe ek olarak kullanıcaya silme işlemini gerçekleştirmek istediğinden emin olup olmadığını sordurup öyle işlemi gerçekleştirelim.Birde hata oluştuğunda programın patlamaması için try-catch kullanalım.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace veritabani_baglanti
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //Daha fazla bilgi için : www.gorselprogramlama.com
OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=data.accdb");
DataTable tablo = new DataTable();
OleDbDataAdapter adtr = new OleDbDataAdapter();
OleDbCommand kmt =new OleDbCommand();
void listele()
{
tablo.Clear();
bag.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter("select * From ogrbil", bag);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
adtr.Dispose();
bag.Close();
} //Daha fazla bilgi için : www.gorselprogramlama.com
private void Form1_Load(object sender, EventArgs e)
{
listele();
dataGridView1.Columns[0].HeaderText = "No";
dataGridView1.Columns[1].HeaderText = "Adı";
dataGridView1.Columns[2].HeaderText = "Soyadı";
dataGridView1.Columns[3].HeaderText = "Sınıfı";
}
private void button1_Click(object sender, EventArgs e)
{
bag.Open();
kmt.Connection = bag;
kmt.CommandText = "INSERT INTO ogrbil(nosu,adi,soyadi,sinifi) VALUES ('" +textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
kmt.ExecuteNonQuery();
kmt.Dispose();
bag.Close();
listele();
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
} //Daha fazla bilgi için : www.gorselprogramlama.com
private void sil_Click(object sender, EventArgs e)
{
try
{
DialogResult cevap;
cevap = MessageBox.Show("Kaydı silmek istediğinizden eminmisiniz", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (cevap == DialogResult.Yes)
{
kmt.Connection = bag;
bag.Open();
kmt.CommandText = "delete from ogrbil where nosu='" + textBox5.Text + "'";
kmt.ExecuteNonQuery();
bag.Close();
listele();
textBox5.Clear();
}
}
catch (Exception hata)
{
MessageBox.Show(hata.Message);
}
}
}
} //Daha fazla bilgi için : www.gorselprogramlama.com


Örnek: Yukarı örneklerde silmek istediğimiz kaydı textbox’a girerek yapıyorduk.Eğer istersek bunun yerine kullanıcının dataGirdView’de seçmiş olduğu kaydı sildirebiliriz.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace veritabani_baglanti
{ //Daha fazla bilgi için : www.gorselprogramlama.com
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=data.accdb");
DataTable tablo = new DataTable();
OleDbDataAdapter adtr = new OleDbDataAdapter();
OleDbCommand kmt =new OleDbCommand();
void listele()
{
tablo.Clear();
bag.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter("select * From ogrbil", bag);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
adtr.Dispose();
bag.Close();
} //Daha fazla bilgi için : www.gorselprogramlama.com
private void Form1_Load(object sender, EventArgs e)
{
listele();
dataGridView1.Columns[0].HeaderText = "No";
dataGridView1.Columns[1].HeaderText = "Adı";
dataGridView1.Columns[2].HeaderText = "Soyadı";
dataGridView1.Columns[3].HeaderText = "Sınıfı";
}
private void button1_Click(object sender, EventArgs e)
{
bag.Open();
kmt.Connection = bag;
kmt.CommandText = "INSERT INTO ogrbil(nosu,adi,soyadi,sinifi) VALUES ('" +textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
kmt.ExecuteNonQuery();
kmt.Dispose();
bag.Close();
listele();
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
}
private void sil_Click(object sender, EventArgs e)
{ //Daha fazla bilgi için : www.gorselprogramlama.com
try
{
DialogResult cevap;
cevap = MessageBox.Show("Kaydı silmek istediğinizden eminmisiniz", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (cevap == DialogResult.Yes)
{
kmt.Connection = bag;
bag.Open();
kmt.CommandText = "delete from ogrbil where nosu='" + dataGridView1.CurrentRow.Cells[0].Value.ToString() + "'";
kmt.ExecuteNonQuery();
bag.Close();
listele();
}
}
catch (Exception hata)
{
MessageBox.Show(hata.Message);
}
}
}
} //Daha fazla bilgi için : www.gorselprogramlama.com


Dersin videolu anlatımı ve anlatımda yapılan projeyi indirmek için



Merhaba.
dataGridView de Secilen Satıra Göre Kayıt Silme İşlemi Yaptırmak Istiyorum Bunun icin Ne Yapmam gerekiyor.Yardımcı olurmusunuz.Simdiden Teşekkürler.
sayın admin.
ders çok güzel. ama veri bulma işlemini sadece no ile sınırlandırmak bizim işlerimizi oldukça zora sokar.
diyelim ki, 1530 tane personel var. onların personel bilgileri girilecek. isim olarak biliyoruz.
herkesin sicillerini ezberde tutmak bir hayli zor.
diyorum ki, texboxlardan her hangi birine veri girince dataGridView den süzmeli o bilginin üzerine tıklayınca veya bul butonuna basınca bilgiler tüm texboxlara eklenmeli sonra sil işlemi yapmalıyız.
bu bizim işlerimizi daha da kolaylaştırır. ve yapacağımız program daha profesyonelce olur.
teşekkürler.
arama işleminide anlatacağız.İsim veya soyisim ile arayıp seçtikten sonra silinebibilir.Sabır arkadaşlar. Tüm konuları anlattıktan sonra hepsine çözüm olacak.Biz tüm bilgileri veriyoruz.Siz isteğinizi kullanın.Ama zamanla.
arkadaşım dikkat etmedin galiba.Zaten son örnek seçilen satıra göre silme işlemi yapıyor.
üzerine gittiğimiz satır daki bilgilerin texboxlara yansıtılması nasıl olur.
yada bulduğumuz satıra çift tıklayınca.
sayın admin, sakın ola ki eleştirdiğimizi sanmayın.
bilginiz âlî, biz bilmediklerimizi soruyoruz. ya da kafamıza takılanları soruyoruz.
anlatımınız için çok çok çok teşekkür ederim sizin anlattıklarınızla veritabanı ekleme silme üzerindeki birikmiş bilgilerim daha da gelişti artık kayıt ekliorum siliorum yakında aramayı da yapıcam
üzerine gittiğimiz satır daki bilgilerin texboxlara yansıtılması yarınki derste anlatacağım.Dediğim gibi sırayla anlatmaya çalışıyorum.Biraz sabır.Konular bitince değinmediğimiz bir konu olunca hatırlatırsınız.Ama derslerimiz devam ediyor.
iyi günler.admin bey atladığımız bir noktayı farkettim.ad kolonuna göre veri tabanından silme yapınca adı aynı olanların tümünü siliyor.Ben şimdi bu kodları kullanıyorum baktım kolon 1 benim vtb de ad alanına denk geliyor.Adı ali olan birini seçtim sil e bastım bütün ali ler silindi.Bunu önlemek için en iyisi 0. kolona denk gelen id ile silmek.nitekim bende öyle yapmak istedim ama olmadı.çünkü kodun sonundada yazmışsınız(…..dataGridView1.CurrentRow.Cells[1].Value.ToString(); ..id ile silme yapmak istediğimde tip uyuşmazlığı diyor.çünkü kodun sonunda .tostring yazıyor.
sizde örneği id alanına göre ayarlarmısınız.işin içinden çıkamadım ben.hemde örneği kullananlar içinde iyi olur.teşekkürler…
Arkadaşım silme işlemini benzersiz bir alan baz almalsın.Bu İd,tckimlik,no olabilir.Yukarıdaki örnekte no baz alınmıştır.Çünkü öğrencinin nosu benzersizdir.0. kolonda no olduğu için şarta dataGridView1.CurrentRow.Cells[0].Value.ToString() yazdım.Örneği dikkatli incele.Anlayacağın isme göre değil noya göre silme işlemi yapıyor.
hmm.bende id alanına göre yapıyorum ama veri tipi uyuşmazlığı diyor.nedenini çözemedim
merhaba.ben programı calıstırdıgımda ıkı datagrıdvıew ımde aynı verılerı gosterıor fıkrınız varmı?
aynı verilerin gösterilmesinin sebebi DataSource sini aynı datatable belirtmenizdir.Eğer farklı iki tablo göstereceksesiniz iki datatable tanımlamalısınız.
Mesela:
public DataTable tabloMusteri = new DataTable();
public DataTable tabloUrunler = new DataTable();//sanal tablo değişkeni
dataGridviewleri şöyle olmalı
dataGridView1.DataSource =tabloMusteri;
dataGridView2.DataSource =tabloUrınler;
anlatımlarınız için tşk ederim fakat benim şöyle bir sorunum var..
datagride verileri çektiğimde ilk verinin veya herhangibirinin seçili olmamasından dolayı SİL butonuna tıkladığımda hata alıyorum bunu nasıl önlerim datagrid seçili ise silsin değilse uyarı mesajı versin.. Veyaa ilk satır seçili gelsin.. bunu nasıl yaparım sayın admin..??tşkler..
try’daki cevap değişkeninden sonra
if (cevap == DialogResult.Yes && dataGridView1.CurrentRow.Cells[0].Value.ToString().Trim() != “”)
şartını kullanabilirsin. Bunun anlamı seçili satırın 0. hücresi boş değilse.Yani seçim yapılmışsa silsin.
onu yaptm onda sıkıntı yok.benim anlatmak istediğim programı açtıkdan ve mesela arama yaptıkdan sonra verileri datagridview e çektim ama ilk gelen ekran seçili olmadığı için yani herhangi bi alan seçili gelmediği için kullanıcılar yanlışlıkla veya colums seçmeden silme veya düzeltme işlemi yaparlarsa program hata vericek burda yaprıtmak istediğim ya alan seçili gelsin yada ben
kullanıcıya bir hata mesajı göndereyim yani bu “silinecek alanı seçmediniz” gibisinden bişey olsun..
ancak bi üstteki mesajı attıkdan sonra araştırdım ve
dataGridView2.Rows[0].Selected = true;
dataGridView2.FirstDisplayedScrollingRowIndex = 0;
bu kodları buldum çok güzel seçili getiriyor bana ama datagridview de benim gizlediğim id alanı
sıfırıncı alan olduğundan ve ben id alanını gizlediğim için seçili getirmiyor
dataGridView2.Columns[0].Visible = false;
yani id alanı gizli değilse seçili olarak getiriyor ama gizli ise seçmeden getiriyor..bunun bir çözümünü bulabilirmiyim..biliyorum çok uzun ve karışık oldu gibi ..çok tşk ederim yardımların için..
dataGridView2.Rows[0].Selected = true; yerine dataGridView2.Rows[1].Selected = true yaz.
Veya datagridview seç.Propertiesten tabIndex’ini rakamla 0 (sıfır) yaz.
merhaba
ben basice bağladığımız tablodaki sütunlara girdiğim verilerin hepsini seçip silen komut arıyorum bana yardım edermisinz
kmt.CommandText = “delete * from ogrbil “;
öncelikle siteniz muhte$em ,biLqiLerinizi bizimLe payla$manızda çok güzeL bunun için te$ekkür ediyorum.$hsen öqretmenimden çok sizden daha çok biLqi aLdım
buqün sınavım var ve bu tür bi program yazdıracagını anlattı.ßende geçip pc ba$ına ara$tırmaya başladım veri tabanına bağlanma , bağlanıldıktan sonra tabloya kayıt ekleme kayıt silme adına göre filtreleme sınıfa göre filtreleme yaptıracaqını söledi.filtrelemeleri sayeniz de yaptım yanLız hocamız bi ana menü oLu$turaacaksınız dedi ekrana ilk o qelecek sanırım daha sonra kayıt ekleme silme ve filtrelemeler ypılacak dedi Lise son sınıf öqrenciLeriyiz sınavLarda zorLuk çekioruz 😀 sınıfta çaLı$an bii ben warım digerLeri oLayı koyverdi qitti 4 buton ve 2 textboxım war kayıt eklerken 2 textbox yeterLi oLacak mı çünkü aLanLarım tc_kimLik , okuLno , adi , soyadi, sinifi , bolumu accessimin adıda okul tablo adım ogrenci…
void Listeleme() yaptıgımdada sürekli içeriginde hata veriyor bnde listeleme yapmıyorum zaten kayıt ekleme ve silmeyide bu yüzden yapamıorum sanırım sınaw 8.30 de başlayacak 10.30 ta bitecek ilk sınavım oldukça kötü geçti bunda da böyle olsunistemiorum lütfen yardımcı olun
Kayıt Sili de yaptım yanLız ekranı tekrar çaLı$tırırca siLineni görebiLiorum
silineni görmemen için listele prosedürünü çağırmalısın.Yani datagridview’deki bilgileri yenilemelisin.
kmt.Connection = bag;
bag.Open();
kmt.CommandText = (“Select * from maclar where skor/attigi = ’65′”);
kmt.ExecuteNonQuery();
bag.Close();
listele();
burada ki kmt.ExecuteNonQuery();
de hata weriyor hocamızda uğraştı ama sorun ne oLabiLir sürekli onda hata veriyor :S
Where den sonraki alan isminde sorun olabilir.Veri tabanındaki alan isimleri ile karşılaştır.
selamlar,kıymetli dostlarım,bende bir txt uzantılı bir sözlük dosyası var.bu txt dosyasında en az 9-10 dilde açıklamlar,yazılar var.ben ise bu dosyadaki arapça ve türkçe dilerindeki yazılar hariç diğer dillerdeki silmeyi nasıl yapabilirm.
merhaba,sql komutları kırmızı renkte 😀 Bilgisi olan biri yardım edebilir mi?simdiden tsk..
merhaba, öncelikle paylaşımlarınız için teşekkürler gerçekten bizim gibi tecrübesi olmayanlar için kolay ve açıklayıcı anlatımlar,
benim şöyle bi problemim var silme butonuna örnekte gösterdiğiniz gibi silme komutunu yazdım fakat silme işlemini yaptığımda “Ölçüt ifadesinde veri türü uyuşmazlığı.” şeklinde bi uyarı alıyorum baya bi araştırma yapmama rağmen çözümünü bulamadım, yeni kayıt eklerken veya değiştirme işlemi yaparken gelen bu şekildeki hatalarda veri tabanındaki veri türü ile girilen veri türünün uyuşmaması sonucu olabileceği söyleniyor fakat ben zaten kayıtlı olan bi veriyi silmeye çalışıyorum ve bu şekilde bi hata alıyorum…
yardımcı olursanız sevinirim şimdiden teşekkürler…
Merhaba. Öncelikle paylaştığınız projeler için ne kadar teşekkür etsem azdır. Bir sorum olacaktı.
Bir öğrenci bilgi sistemi yapıyorum ve kayıt olma ve silme işlemlerini yapmak üzere derslerinizden çokça faydalandım. Fakat kayıtları listeme işlemi yaparken liste boş bir şekilde geliyor dataGridView e. Kodları aşağıya koyuyorum bir yanlışım mı var acaba?
Veritabanında 4 tane bilgi var. ogrenci_no , sifre , ad , soyad.
*********************************************************************
void listele()
{
tablo.Clear();
bag.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter(“select ogrenci_no, ad, soyad From ogrenci_giris”, bag);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
adtr.Dispose();
bag.Close();
}
********************************************************************
private void button2_Click(object sender, EventArgs e)
{
listele();
dataGridView1.Columns[0].HeaderText = “Öğrenci No”;
dataGridView1.Columns[1].HeaderText = “Adı”;
dataGridView1.Columns[2].HeaderText = “Soyadı”;
}
*********************************************************************
Buton2 ye tıkladığında liste gözükmesi gerekir.Eğer form yüklendiğinde listenin gözükmesini istiyorsan buton2 deki kodları form_Load a yaz.
Bir şey sorucam benim veritabanınmda “id” alanım hem birincil anahtar hemde otomatik sayı ben güncelleme ve silme işlemini “id” ye göre almak istiyorum ama veri tür uyuşmazlığı diye hata alıyorum.
Acaba ne yapmam gerek bilgilendirirseniz sevinirim konu baya bir eski ama ben gene cevap yazdım 🙂 …
id yi otomatik sayı olmaktan kaldırsam id alanına otomatik artan sayı nasıl yaptırabilirim yada c# ile varmı öyle bir durum 🙂
Kürşat :
Sql koldlarını parametre olarak yaz.