Bu yazımızda C# ile SQL Server bağlantısı kurarak temel veritabanı işlemlerini, DataGridView’ e veri çekme (Select), Kayıt ekleme (Insert), Kayıt Silme (Delete) ve Kayıt Güncelleme (Update) gerçekleştireceğiz. Ayrıca DataGridView üstünde tıklanan satırdaki verilerin textBox’ lara ve DateTimePicker içine çekilmesini gerçekleştireceğiz.
Ayrıca yazının sonunda ikinci örneğe ait veritabanı bağlantısını gösteren video da bulunmaktadır.
C# SQL Server veritabanı bağlantısı için 2 örnek gerçekleştireceğiz. İlk örneğimiz için SQL Server da “okul” veritabanındaki “ogrenci” “tablosunu kullanacağız.
Tablomuzu yukarıdaki şekilde oluşturduktan sonra formumuzu da aşağıdaki şekilde oluşturalım.
Kodlarımızı inceleyelim.
Sql server bağlantısı için;
1 2 3 |
using System.Data.SqlClient; |
eklememiz gerekiyor.
Öncelikle SqlConnection, SqlDataAdapter,SqlCommand ve Dataset nesnemizi tekrar tekrar tanımlamamak için Public olarak tanımlıyoruz.
Verilerimizi çekme işlemini de bir kaç yerde kullanacağımız için griddoldur isimli bir metot‘ ta tanımlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 |
void griddoldur() { con = new SqlConnection("server=.; Initial Catalog=okul;Integrated Security=SSPI"); da = new SqlDataAdapter("Select *From ogrenci", con); ds = new DataSet(); con.Open(); da.Fill(ds, "ogrenci"); dataGridView1.DataSource = ds.Tables["ogrenci"]; con.Close(); } |
Oluşturmuş olduğumuz bu metodu Form ilk açıldığında çalıştırmak için Form_Load olayına ekliyoruz. Bu sayede Form açılır açılmaz Verilerimizin DataGridView‘ de görüntülenmesi sağlanacaktır.
1 2 3 4 5 6 |
private void Form1_Load(object sender, EventArgs e) { griddoldur(); } |
Ekle butonuna bastığımızda Textbox‘ lara girilen verilerin Sql tablomuza kayıt edilmesi için ise;
1 2 3 4 5 6 7 8 9 10 11 12 |
private void button1_Click(object sender, EventArgs e) // Ekle butonu { cmd = new SqlCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "insert into ogrenci(ogrenci_no,ogrenci_ad,ogrenci_soyad,ogrenci_sehir) values (" + textBox1.Text + ",'" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')"; cmd.ExecuteNonQuery(); //www.yazilimkodlama.com con.Close(); griddoldur(); } |
kodlarını ekliyoruz.
Güncelle butonumuz öğrenci numarasına göre Ad,soyad ve şehir bilgisinin güncellenmesini sağlayacaktır. Bu işlemler için Güncelle butonuna çift tıklayarak;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void button3_Click(object sender,EventArgs e)//GÜNCELLE BUTONU { cmd =new SqlCommand(); con.Open(); cmd.Connection= con; cmd.CommandText="update ogrenci set ogrenci_ad='"+ textBox2.Text+"',ogrenci_soyad='"+ textBox3.Text+"',ogrenci_sehir='"+ textBox4.Text+"' where ogrenci_no="+textBox1.Text+""; cmd.ExecuteNonQuery(); con.Close(); griddoldur(); } |
kodlarını yazıyoruz.
Son olarak Sil butonunu ayarlıyoruz. Girilen öğrenci numarasına göre kaydı silmek için
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void button4_Click(object sender,EventArgs e)//SİLME BUTONU { cmd =new SqlCommand(); con.Open(); cmd.Connection= con; cmd.CommandText="delete from ogrenci where ogrenci_no="+textBox1.Text+""; cmd.ExecuteNonQuery(); con.Close(); griddoldur(); } } |
kodlarını yazıyoruz.
Artık programımız Select, Insert, Update, Delete gibi temel veritabanı işlemlerini gerçekleştirecektir.
Kodlarımızın tamamlanmış hali aşağıdaki gibi 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 |
using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; //Sql bağlantısı için ekliyoruz. namespace sql_baglanti { public partial class Form1 : Form www.yazilimkodlama.com { public Form1() { InitializeComponent(); } SqlConnection con; SqlDataAdapter da; SqlCommand cmd; DataSet ds; void griddoldur() { con = new SqlConnection("server=.; Initial Catalog=okul;Integrated Security=SSPI"); da = new SqlDataAdapter("Select *From ogrenci", con); ds = new DataSet(); con.Open(); da.Fill(ds, "ogrenci"); dataGridView1.DataSource = ds.Tables["ogrenci"]; con.Close(); } private void Form1_Load(object sender, EventArgs e) { griddoldur(); } private void button1_Click(object sender, EventArgs e) // Ekle butonu { cmd = new SqlCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "insert into ogrenci(ogrenci_no,ogrenci_ad,ogrenci_soyad,ogrenci_sehir) values (" + textBox1.Text + ",'" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')"; cmd.ExecuteNonQuery(); con.Close(); griddoldur(); } private void button3_Click(object sender,EventArgs e)//GÜNCELLE BUTONU { cmd =new SqlCommand(); con.Open(); cmd.Connection= con; cmd.CommandText="update ogrenci set ogrenci_ad='"+ textBox2.Text+"',ogrenci_soyad='"+ textBox3.Text+"',ogrenci_sehir='"+ textBox4.Text+"' where ogrenci_no="+textBox1.Text+""; cmd.ExecuteNonQuery(); con.Close(); griddoldur(); } private void button4_Click(object sender,EventArgs e)//SİLME BUTONU { cmd =new SqlCommand(); con.Open(); cmd.Connection= con; cmd.CommandText="delete from ogrenci where ogrenci_no="+textBox1.Text+""; cmd.ExecuteNonQuery(); con.Close(); griddoldur(); } } |
Örnek 2: Bu örneğimizde yukarıdaki örnekten farklı olarak veritabanı işlemlerini (Ekle -Sil – Güncelle ) Parametre kullanarak gerçekleştireceğiz. Ayrıca datagridview’ e veritabanından çekmiş olduğumuz tarih bulunan tarih bilgisinin dateTimePicker‘ da görüntülenmesini sağlayacağız.
Örneğimizde kullanacağımız veritabanımızın adı “ticaret” ve tablomuzun adı “musteri” olacak.
Kullanacağımız musteri tablosu aşağıdaki gibi olacaktır. örneğimizde “musteri” tablosunda bulunan “mno” otomatik sayı olarak ayarlandığını belirtelim.
Veritabanımızı ve tablomuzu tasarladıktan sonra Form tasarımına geçelim.
Form tasarımını oluşturduktan sonra Datagridview kontrolünün SelectionMode özelliğini FullRowSelect olarak ayarlıyoruz. Örneğimizde Liste işlemleri için ilk örneğimizde olduğu gibi bir Metot tanımlaması yapacağız. Datagridview’ e tıklandığında verilerin ilgili konrollere getirilmesi için DatagridView’ in Cell_Enter olayını kullanacağız. Datagridview’ de yer alan tarih bilgisinin Datetimepicker kontrolüne bağlanmasınıda bu yöntemle gerçekleştireceğiz. Ekle (Insert), Sil (Delete) ve Güncelleme (Update) işlemleri için söylediğimiz gibi yukarıdaki örnekten farklı olarak parametre kullanımını uygulayacağız.
Kodlarımıza geçmeden önce;
Sql server bağlantısı için;
1 2 3 |
using System.Data.SqlClient; |
eklememiz gerektiğini hatırlatalım.
Kodlarımızın tamamı ş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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
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 System.Data.SqlClient; namespace ybSqlveri { public partial class Form1 : Form { SqlConnection baglanti; SqlCommand komut; SqlDataAdapter da; public Form1() { InitializeComponent(); } void MusteriGetir() { baglanti = new SqlConnection("server=.; Initial Catalog=ticaret;Integrated Security=SSPI"); baglanti.Open(); da = new SqlDataAdapter("Select *From musteri", baglanti); DataTable tablo = new DataTable(); da.Fill(tablo); dataGridView1.DataSource = tablo; baglanti.Close(); } private void Form1_Load(object sender, EventArgs e) { MusteriGetir(); } private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString(); textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString(); textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString(); dateTimePicker1.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString(); textBox4.Text = dataGridView1.CurrentRow.Cells[4].Value.ToString(); } private void button1_Click(object sender, EventArgs e) { string sorgu = "Insert into musteri (ad,soyad,dtarih,tel) values (@ad,@soyad,@dtarih,@tel)"; komut = new SqlCommand(sorgu, baglanti); komut.Parameters.AddWithValue("@ad", textBox2.Text); komut.Parameters.AddWithValue("@soyad", textBox3.Text); komut.Parameters.AddWithValue("@dtarih", dateTimePicker1.Value); komut.Parameters.AddWithValue("@tel", textBox4.Text); baglanti.Open(); komut.ExecuteNonQuery(); baglanti.Close(); MusteriGetir(); } private void button2_Click(object sender, EventArgs e) { string sorgu = "Delete From musteri Where mno=@no"; komut = new SqlCommand(sorgu, baglanti); komut.Parameters.AddWithValue("@no", Convert.ToInt32(textBox1.Text)); baglanti.Open(); komut.ExecuteNonQuery(); baglanti.Close(); MusteriGetir(); } private void button3_Click(object sender, EventArgs e) { string sorgu = "Update musteri Set ad=@ad,soyad=@soyad,dtarih=@dtarih,tel=@tel Where mno=@no"; komut = new SqlCommand(sorgu, baglanti); komut.Parameters.AddWithValue("@no", Convert.ToInt32(textBox1.Text)); komut.Parameters.AddWithValue("@ad", textBox2.Text); komut.Parameters.AddWithValue("@soyad", textBox3.Text); komut.Parameters.AddWithValue("@dtarih", dateTimePicker1.Value); komut.Parameters.AddWithValue("@tel", textBox4.Text); baglanti.Open(); komut.ExecuteNonQuery(); baglanti.Close(); MusteriGetir(); } } } |
Video:
C# SQL Server Bağlantı Örneğinin Parametre kullanarak yapılmış diğer örneğine buradan ulaşabilirsiniz.
C# Access veritabanı bağlantısı örneği için tıklayınız.
mysql için nasıl yapıcaz
elinize ağzınıza sağlık çok yardımcı oldunuz.
Merhaba alttaki örnekte 65. satırdaki silme komutundaki yazıların aynısını yazdığımda şu hatayı alıyorum:
System.FormatException: ‘Giriş dizesi doğru biçimde değildi.’
Bu özel durum özgün olarak bu çağrı yığınında oluşturuldu:
[Dış Kod]
gpproje.Form1.button2_Click(object, System.EventArgs) / Form1.cs
[Dış Kod]
gpproje.Program.Main() / Program.cs
bağlantı.Open(); kısmında hata alıyorum ?
baglanti.Open(); ğ yanlış olmuş hata alıyorum neden acaba ?
Bağlantı cümlesini kontrol edin.
Con= new sql……
Server adı, vt adı vs.
İkinci örneğe ait yapılış videosu yazının sonuna eklenmiştir.
Ahmet bey c# veri işlemlerinde araç kiralama otomasyonu yapıyoruz.ama sizin sayfanızda kaydet butonu kodu yok da acaba bize yardımcı olabilirmisiniz.
Ekle butonu yeni kayıt ekleyip kaydediyor. Güncelle butonu da kayıt üstünde yapılan değişikliği kaydediyor.
hocam benim programda hata vermiyor ama ekle sil güncelle çalışmıyor
benim de öyle oluyodu ama m_no yaptığım için programda mno olarak geçiyo eğer sende düzeltmediysen hata verir
sql de m_no yaptıysan yani
Teşekürler ihtiyacımı karşıladı;
1.Program da hata var cmd =newOleDbCommand(); sql olması gerekiyor sanki
Evet haklısınız. Hemen düzeltiyorum. Access bağlantısından uyarlamıştım. Değişikliği unutmuşum o kısımda. Teşekkürler uyarınız için.
veritabanı olarak azure kullanarak nasıl yaparız
Hocam bu kodlari unutanlar ne olcak
Önceki uygulamalardan ya da internetten bakıp hatırlanacak şeyler. Eğer sınav vs içinse sınav öncesi birkaç uygulama ile akılda kalacaktır.
Ahmet hocam harika bilgiler için öncelikle teşekkürler. Bir database üzerinde çalışıyorum, firmadaki saha çalışanları günlük raporlarını bulundukları şehirden girerek database’mize aktarılmasını nasıl sağlayabilirim? MS SQL veritabanı kullanacağım. Teşekkürler.
Merhaba Mehmet Bey. Web Service kullanmanız gerekiyor.
hocam merhabalar debug ıcıne verı tabanını atıyorum baglantıyı nasıl yapabılırım (“Server=.;Database=yucel1;Integrated Security = True”); bu sekılde yaptım baya kullandım sonra hata vermeye basladı
hocam iyi günler arama butonu kodlarını göremiyorum varsa mail atabilirmisiniz teşekkürler
Merhaba. Datarow filter kullanarak filtreleme islemini yapabilirsiniz. Aşağıdaki linki inceleyebilirsiniz.
http://www.yazilimkodlama.com/programlama/dataview-rowfilter-kullanarak-filtreleme-like-kullanimi/
Hocam peki veri tabanında kayıtlı olan bir bilginin aynısını tekrar kayıt etmemize izin veriyor mu eğer vermiyorsa nasıl yaptınız bende buna benzer bir uygulama yaptım.
Veritabanında birincil anahtar yani primary key olarak ayarlanan alanın tekrarina izin vermez. Örnek olarak ogrno birincil anahtar olarak ayarlanmışsa aynı ogrenci numarasını kaydetmenize izin vermeyecektir.
Onu ayarladım fakat messagebox olarak uyarı gelmesini yapamadım try catch yapısıyla yapmaya çalıştım olmadı
Sizin ellerinizde büyümüş biri olarak söylüyorum elleriniz sağlık hocam bilgilerinizle bizi yetiştirdiniz iyi yerlere gelmemizi sağladınız teşekkürler 🙂
gerçekten faydalı. ellerinize sağlık.
Teşekkürler.
Teşekkür ederim. Çok işime yaradı…
yazınız için çok teşekkür ediyorum.bu ve bundan önceki baktığım yazılarınız bana gerçekten yardımcı oldu konular hakkında.
Teşekkürler. Fırsat buldukça yeni konular ve örnekler eklemeye çalışıyorum.
verdiğiniz kodları yazdım ama con.open(); da hata veriyor yardımcı olursanız sevinirim
Bağlantı cumlesini kontrol edin.
access veri tabanıyla bağlarken öğrenci numarasının atandığı textbox ın başına tek tırnak koyuluyor ama sql de neden konulmuyor?
İnt turunde oldugu icin ‘ yok.
teşekkürler
Tesekkurler. Bide veritabanindan bir sütunu alip diziye atayabilirmiyiz. Diziyi siralama algoritmalarina sokup siralama surelerini hesaplamam lazim. Yardimci olursaniz sevinirim.
http://www.yazilimkodlama.com/programlama/c-net-oledbdatareader-nedir/
Atabilirsiniz. Verdiğim linkteki örneği iceleyip uyarlayabilirsiniz. Listbox yerine diziye kullanabilirsiniz.
Hocam listBox1.Items.Add yerine diziyi yazıyorum ama dizide add özelliği olmadığı için olmuyor.
Bi tane sayac olisturup Dizi[i] = seklinde atama yapacaksiniz.
Teşekkürler başarılı bir çalışma olmuş