C# ile veritabanı tablolarında silme, ekleme güncelleme gibi işlemleri yapıyoruz ama çalıştığımız tablo alanları diğer alanlarla ilişkili ise o zaman işler biraz değişir. Örneğin sipariş ekleme işlemi yapıyorsak siparişi kaydettiğimizde hem sipariş tablosuna kayıt geçecek hem de gelir tablosuna kayıt eklenecek, bu siparişi silmeye kalkarsanız ve gelir tablosundan silmezseniz bu sefer bilgiler tutarsızlaşacaktır. Bunun gibi durumları engellemek için birden fazla tablo ile çalışıyorsak mutlaka tabloları ilişkilendirmek gerekir. Ben bu durumu açıklayıcı bir örnekle anlatmaya çalışacağım.
Örneğimizde il ve ilçe bilgilerini tutan iki adet combobox olacak, iller kısmından il seçtiğimizde ilçeler kısmında o ile bağlı ilçeler listelenecek. Seçtiğim ili veritabanımdan silersem o ile bağlı ilçeler de otomatik olarak veritabanında silinecek.
- Yeni bir Visual Studio c# projesi oluşturunuz.
- Projenizin bin klasörü altında Debug klasörünü açınız. Bu klasör içinde sağ tıklayarak yeni bir Access dosyası oluşturunuz. (ben Access 2007 kullanıyorum, veritabanı adını “sehirler” yaptım)
- Veritabanını açıp menüden Oluştur sekmesi altında Tablo seçeneğini seçiniz. Görünüm altından Tasarım Görünümü seçiniz ve karşınıza gelen tablo adı panelinde tabloya “iller” adını verelim.
- İller tablosunun Tasarımını aşağıdaki gibi yapınız.
- Aynı şekilde ilceler tablosu oluşturunuz ve tasarımını aşağıdaki gibi yapınız.
- Şimdi bu iki tabloyu ilişkilendirelim. Menüden Veritabanı Araçları altında İlişkiler butonuna tıklayalım. Karşımıza gelen panelde sırayla tablolarımızı seçip ekle butonuna basalım. Her iki tabloyu ekledikten sonra kapat butonuna basalım. İller tablosundaki plaka alanını fare ile sürükleyerek ilceler tablosundaki il_kod alanının üzerine bırakalım. Karşımıza aşağıdaki ekran gelecek.
- Alanların birisinde 1 diğerinde sonsuz işareti çıktıysa işlem tamamdır. İlişkileri kaydedip kapatalım.
- Sol kısımda yer alan iller tablosuna fare ile tıklayarak açalım ve veri girelim
- İlceler tablosuna fare ile tıklayarak veri girelim. Kimlik alanına siz veri girmeyeceksiniz (otomatik dolacak), il_kod alanına ilin plaka numarasını, ilce_adi alanına o plakaya ait ilçeleri yazacaksınız.
- Eğer ilişki doğru kuruldu ise iller tablosunda il adlarının yanında + işareti çıkmış olacak. O + işaretlerine tıkladığınızda ilişkili ilçeler görülür.
- Şimdi sıra program kısmına geldi. Aşağıdaki gibi 2 adet label, 2 adet combobox ve 1 adet butondan oluşan form tasarımını yapınız.
- Program kütüphanesinin altına şunları ekleyiniz.
123using System.Data.OleDb;using System.Data.Sql;using System.IO;
- public olarak aşağıdaki tanımlamaları yapınız.
12public OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=sehirler.accdb");public string menu;
- Form1_Load olayına aşağıdaki kodları yapıştırınız.
123456789101112OleDbCommand vtKomut = new OleDbCommand("select il_adi from iller", bag);if (bag.State == ConnectionState.Closed) bag.Open();OleDbDataReader vtkayit;vtkayit = vtKomut.ExecuteReader();while (vtkayit.Read()){comboBox1.Items.Add(vtkayit[0].ToString());}bag.Close();
- comboBox1_SelectedIndexChanged olayına aşağıdaki kodları yapıştınız.
123456789101112131415161718192021222324comboBox2.Items.Clear();string ana = comboBox1.SelectedItem.ToString();OleDbCommand vtKomut = new OleDbCommand("select plaka from iller where il_adi='" + ana + "'", bag);if (bag.State == ConnectionState.Closed) bag.Open();OleDbDataReader vtkayit;vtkayit = vtKomut.ExecuteReader();while (vtkayit.Read()){menu = vtkayit[0].ToString();}bag.Close();OleDbCommand vtKomut1 = new OleDbCommand("select ilce_adi from ilceler where il_kod=" + menu + "", bag);if (bag.State == ConnectionState.Closed) bag.Open();OleDbDataReader vtkayit1;vtkayit1 = vtKomut1.ExecuteReader();while (vtkayit1.Read()){comboBox2.Items.Add(vtkayit1[0].ToString());}bag.Close();
- button1_Click olayına aşağıdaki kodları yapıştınız.
12345678if (bag.State == ConnectionState.Closed) bag.Open();OleDbCommand sil = new OleDbCommand("delete from iller where il_adi='" + comboBox1.SelectedItem.ToString() + "'", bag);sil.ExecuteNonQuery();sil.Dispose();bag.Close();comboBox1.Items.Clear();comboBox1.Text = "";Form1_Load(sender, e);
Hocam c# örnekleri verirmisiniz.
Kodlama zaten c# ile yapıldı.