C# C# Windows Form Örnekleri Programlama

C# İlişkili Tablolardan Veri Çekme

Bu yazımızda C# ile Sql veritabanında bulunan ilişkili tabloları kullanarak bağlantı oluşturma ve bu tablolardan istenilen kayıtları çekme işlemini gerçekleştiren basit bir uygulama oluşturacağız. Örneğimizde veritabanımızda 3 adet tablo bulunmakta. Bu tablolardan birincisi Öğrenci bilgilerini, ikincisi Kitap bilgilerini ve üçüncüsü ise Hareket bilgilerini yani hangi öğrencinin hangi kitabı aldığı,ne zaman aldığı vb.. bilgileri tutuyor olacak. Formumuzda ise 2 adet datagridView kontrolü olacak. 1. DataGridView kontrolünde Öğrenciler listelenecek. Listelenen bu öğrencilerden hangisi seçiliyse dataGridView2 kontrolümüzde o öğrenciye ait hangi kitabı okuduğu bilgisinin görüntülenmesini sağlayacağız. Örneğimizi adım adım gerçekleştirelim.

İlk olarak dbKitaplik veritabanımızı oluşturalım ve Ogrenci,Kitap ve Hareket tablolarını aşağıdaki gibi oluşturalım.

  

Tablolarımızı oluşturduktan sonra deneme amaçlı kayıtlarımızı giriyoruz.

 

Tablolarımızı oluşturduktan sonra Form kısmına geçiyoruz. Örneğimizde sadece veri çekme işleminin nasıl yapıldığını göstereceğim için 2 adet dataGridView kontrolü yeterli olacaktır.

Şimdi 1. DataGridView içinde Öğrenci listesinin gelmesini sağlayalım. Bu işlemi Form Yüklendiğinde yani Form_Load olayında gerçekleştireceğiz.

Kodlarımızı oluşturmaya başlayalım. İlk olarak Sql bağlantıları için gerekli;

satırını ekleyelim.

Daha sonra public olarak aşağıdaki nesnelerimizi oluşturalım.

Şimdi Ogrenci tablosundaki tüm öğrencilerin dataGridView içinde listelenmesini sağlayalım.

Bu kısım basit olan kısımdı. Daha önceki veritabanı örneklerimizde sıkça değişik şekillerde kullanmıştık. Şimdi asıl önemli olan kısma yani üstüne tıklanan öğrenciye ait bilgilerin diğer dataGridView‘ de görüntülenmesini sağlayalım. Bu işlemi  gerçekleştirmek için dataGridView1_SelectionChanged olayını kullanacağız.

Seçilen öğrenciye ait Hareket tablosundaki kitap bilgilerini aşağıdaki gibi bir kod yazarak çekebiliriz.

Fakat bu şekilde yaptığımızda bilgilerin tam olarak neye ait olduğu konusunda fikir sahibi olmanın zor olduğunu söyleyebiliriz.

Projemizi çalıştırdığımızda ekran çıktısı yukarıdaki gibi olacak ve çok anlaşılır olmayacaktır. Şimdi bunun yerine daha anlaşılır bir şekilde gösterimi sağlayacak sorgumuzu oluşturalım. Sorgumuzda INNER JOIN ve AS  kullanımını göreceğiz.

Kodlarımızı yukarıdaki şekilde değiştirdiğimizde ekran görüntüsü de aşağıdaki gibi değişecektir.

dataGridView1_SelectionChanged olayına yazdığımız kodları incelediğimizde seçili olan satırdaki öğrenci numarasını elde etmek için

satırının kullanıldığını görüyoruz. Bu numara bizim için bu öğrenciye ait diğer tablolardaki verileri çekmek için gerekli bir veri. Sorgumuzda da bu öğrenciye ait  diğer verilerin Kitap ve Hareket tablolarında çekilerek listelendiğini görebilirsiniz.

Daha sonraki yazılarımızda ilişkili tablolarda Kayıt ekleme , Kayıt Silme ve Kayıt Güncelleme işlemlerine ait örnekler oluşturacağız.

Kodlarımızın tamamlanmış hali;

 

 

6 Yorum

  • Merhabalar ticari bir kaygı olmadan tamamen merak ile c# öğrenmeye başladım. bir akrabam muhtar ve köyde evlenenleri kaydedip nüfus müdürlüğüne gönderilmek döküm alması gereken bir form olacak. Sql de 3 tablo olacak, 1.tablo da bayana ait bilgiler, 2.tabloda erkeğe ait bilgiler ve 3. tabloda da evlenme cüzdan no, evlilik tarihi gibi her ikisine ait olan bilgilerin yer aldığı GenelBilgiler tablosu olacak. bu üç tabloyu tek bir datagrid de gösterme imkanı varmı?

    • Erkek icin ayri kadin icin ayri tabloya gerek yok bence. Bir tablo kisiler için ve bor tabloda evlilik için yeterli olur diye düşünüyorum. Evlenen kisilerin id si evlilik tablosuna yazilir. Join ile istediğin bilgiyi cekersin.

  • Ahmet bey merhaba konu ile ilgili olmayabilir ama bir sorum olacak size. Bir quiz maker yapmaya çalışıyorum.Veri tabanında 500 tane soru var. Comboboxa soru sayısı ekleyip örneğin 20,30,40 daha sonra comboboxtan soru sayısını seçip testi başlat dediğimizde comboboxta seçilen soru sayısı kadar rastgele soru nasıl çekebilirim.

  • Öncelikle çok teşekkür ederim ilginiz için. Aradığımız şey konusunda yardımcı oldunuz. Biz kodumuzu VB.net üstünden yazıyoruz. Aynı mantıkla uygulamaya çalıştık ancak bir türlü yol alamadık. Bu konuda bir fikriniz var mı diye danışmak istedim. Ellerinize sağlık.

    • Rica ederim. Vb.net ile ilgili maalesef yardımcı olamıyorum. Ama programınızın çalışmayan ya da hata oluşan bölümleri ile ilgili yine yardımcı olmaya çalışırım. Kolay gelsin.

Yorum yap

Web Tasarım & Programlama sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et