Bu yazımızda C# ile ilişkili 3 SQL tablosunu Inner Join kullanarak birleştirme ve DataGridView’de görüntüleme işlemini gerçekleştireceğiz. kutuphane veri tabanında bulunan tablolarımızı inceleyelim.
1- “ogrenci” Tablosu
2- “kitap” Tablosu
3- “islem” Tablosu
Tablolarımızı incelediğimizde “islem” tablosunda, öğrencilerin hangi kitapları aldığını alış ve veriş tarihleriyle birlikte kayıt altına alındığını görüyoruz. Fakat bu tabloyu incelediğimizde Normalizasyon Kuralları gereği sadece öğrenciye ait ogrno verisinin ve yine kitaba ait kitapno bilgisinin tutulduğunu görüyoruz.
Tablomuzu bu şekilde program içinde görüntülediğimiz zaman pek anlaşılır olmayacaktır. Örneğimizde bu tablonun öğrenci ve kitaba ait detayların görüntülenecek şekilde C# Windows Formda bulunan DataGridView kontrolüne aktarılmasını sağlayacağız.
Formumuzu basit bir şekilde oluşturacağız. Sadece bir dataGridView kontrolü ekleyeceğiz. Form_Load olayına yazacağımız kodlarla Verilerimizin istediğimiz şekilde görüntülenmesini sağlayacağız.
Kodlarımızı yazmaya başlıyoruz. Öncelikle aşağıdaki kütüphaneyi ekliyoruz.
1 2 3 |
using System.Data.SqlClient; |
Form_Load event’ ı için kodlarımız.
1 2 3 4 5 6 7 8 9 10 11 12 |
private void Form1_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection("server=.; Initial Catalog=kutuphane;Integrated Security=SSPI"); DataTable dt = new DataTable(); string sql = "Select ogrenci.ogrno, ograd,ogrsoyad,kitapadi,sayfasayisi,atarih,vtarih from ogrenci join islem on ogrenci.ogrno = islem.ogrno join kitap on kitap.kitapno = islem.kitapno"; con.Open(); SqlDataAdapter da = new SqlDataAdapter(sql, con); da.Fill(dt); dataGridView1.DataSource = dt; } |
Kodlarımızı yazıp projemizi çalıştıralım.
Görüldüğü gibi islem tablosunda anlaşılmaz şekilde bulunan veriler yerine kayıttaki öğrenci ve kitaba ait istediğimiz alanların görüntülenmesini sağlamış olduk. Sütun başlıkları için Takma ad kullanmak isterseniz String sql değişkeninin aşağıdaki şekilde değiştirebilirsiniz.
1 2 3 |
string sql = "Select ogrenci.ogrno AS [NO], ograd AS [ADI],ogrsoyad AS [SOYADI],kitapadi AS [OKUDUĞU KİTAP],sayfasayisi AS [SAYFA SAYISI],atarih AS [ALIŞ TARİH],vtarih AS [VERİŞ TARİHİ] from ogrenci join islem on ogrenci.ogrno = islem.ogrno join kitap on kitap.kitapno = islem.kitapno"; |
Bu durumda proje çalıştırıldığında aşağıdaki görüntü elde edilecektir.
Merhaba ben sorunumu exceldeki verileri db’ye aktarıp oradan joinile çekerek çözdüm ancak bu seferde başka sorula karşılaştım.Srunum şu Exceldeki tarih alanını db’e aktarırken datetime olarak değil varchar olarak aktarabiliyorum.Bu şekilde yapınca DateTimePicker veya textbox ile sorgulatma yapınca Must declare the scalar variable “@bastar”. şeklinde hata alıyorumYardımcı olursanız sevinirim.
Kullandığım kodlar
OleDbConnection baglanti = new OleDbConnection(“Provider=SQLOLEDB;Data Source=.;Initial Catalog=siparis_liste;Integrated Security=SSPI”);
baglanti.Open();
OleDbCommand sql = new OleDbCommand(“SELECT e.tarih as [TARİH],e.referans as [REFERANS],e.kasa_ici AS [KASA İÇİ],e.bakiye AS [BAKİYE],s.aciklama AS [AÇIKLAMA],s.tolerans AS [TOLERANS],s.ham_boy[HAMMADDE BOYU],s.kalite AS [KALİTE],s.kasa_tipi AS [KASA TİPİ],ceiling(e.bakiye/e.kasa_ici) as [KASA ADETİ] from [excel] e inner join [siparisler] s on e.referans=s.referans where e.tarih>=@bastar”, baglanti);
DataTable dt = new DataTable();
sql.Parameters.AddWithValue(“@bastar”,dateT,mePicker1.Value);
sql.Parameters.AddWithValue(“@bittar”, dateTimePicker2.Value);
OleDbDataAdapter daa = new OleDbDataAdapter();
sql.ExecuteNonQuery();
daa.Fill(dt);
dataGridView1.DataSource = dt;
baglanti.Close();
DateTimePicker ifadesi kodlarda yanlış yazılmış görünüyor. Kontrol eder misiniz? dateT,mePicker1.Value olarak görünüyor.
O kısmı ben düzelttim ancak yine de sorun devam ediyor.
Çözdünüz mü bilmiyorum ama tarih formatınızı hem Accdb veri tabanından ; hem de kod kısmından string olarak değiştirmeniz gerekiyor. ‘tarih’ şeklinde yapmazsanız int değer gibi çalışır.
Merhaba
Öncelikle böyle paylaşımlar yaptığınız için TEŞEKKÜRLER.
Benim şöyle bir sorunum var.
Benim projede 2 adet form var.
1.Formda datagridview’de excel dosyasından veri çekiyorum.
2.Formdaki datagridview’de ise sql serverden veri çekiyorum.
Bu iki tablonun referans adında ortak isimleri var.Benim istediğim 1.Formdaki datagridviewe excel dosyasını çektiğimde referans alanını sql serverdan karşılaştırarak gerekli alanları karşısına ilave etmek.Örnek
1.Form : Tarih Referans Adet 2.Form Referans Açıklama
11/09/18 755548 100 755548 Sırt Bağlantı Aparatı
İki veri alanlarını karşılaştırarak
1.Formdaki datagridviewde
Tarih Referans Adet Açıklama
11/09/18 755548 100 Sırt Bağlantı Aparatı
şeklinde listelemesi.Yardımcı olursanız sevinirim.
Merhaba. Bir şeyi merak ettim. Diğer tablodaki verilerin excelde tutulması zorunlumu? Onuda sql veritabani icine alırsanız yapmak istediginiz is çok kolaylasacaktir.
Excelde şöyle zorunlu ben o bilgileri bir firmanın portalından excel formatında çekebiliyorum başka formatta veya şekilde data almam söz konusu değil malesef.
Staj da lisans takip programı yapmam istendi bu şekil ilişkisel veri tabanlı bir personel ait cihazlar birden fazla olabilir bir personelin cihazı ve bu cihazların ürün anahtarları girilecek aynı kod girilince veri girşi olmayacak soft silme yardımcı olabilir misiniz?