Bu yazımızda ilişkili veritabanından veri çekme işlemini anlatan bir örnek gerçekleştireceğiz. Veritabanı olarak Access’ te hazırlanmış iller.accdb dosyasını kullanacağız. Örneğimizde Combobox1′ de seçilen şehir ismine göre Combobox2′ de ilçe gösterimini sağlayacağız. İller ve ilçelerin bulunduğu dosyayı yazımızın sonunda bulunan linkten indirebilirsiniz.
Öncelikle iller.accdb uzantılı veritabanımıza bakalım.
Veritabanımız 2 tablodan oluşmakta. “iller” tablosu ve “ilceler” tablosu. Yukarıdaki resimlerde bu tablolara ait alan adlarını görmekteyiz. Yeni bir C# Windows Form projesi oluşturarak örneğimize başlayalım. Form tasarımımızı basit bir şekilde 2 adet comboBox kontrolü ekleyerek oluşturalım.
Veritabanı dosyamızı Projemizin altında bulunan “../Bin/Debug” klasörü altına kopyalayarak devam ediyoruz. Şimdi yapacağımız işlem C# ile Access arasında bir veritabanı bağlantısı oluşturarak Form Yüklendiğinde yani Form_Load olayına Şehir listelemesinde kullanacağımız Combobox1′ e verileri çekmek olacak. Burada Combobox kontrolünün ValueMember ve DisplayMember özelliklerini kullanacağız. Combobox’ ın Valuemember’ ına “iller” tablosunun “id” alanını DisplayMember’ ına ise “sehir” alanını bağlayacağız.
Kodlarımıza geçelim.
Öncelikle projemize;
1 2 3 |
using System.Data.OleDb; |
dahil ediyoruz.
Daha sonra public olarak;
1 2 3 |
OleDbConnection con; |
bağlantı nesnemizi oluşturuyoruz. Form_Load event’ ı için;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void Form1_Load(object sender, EventArgs e) { con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=iller.accdb"); DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter("select * from iller ORDER BY id ASC ", con); da.Fill(dt); comboBox1.ValueMember = "id"; comboBox1.DisplayMember = "sehir"; comboBox1.DataSource = dt; } |
kodlarını yazıyoruz. Şimdi Combobox’ta seçilen il’ e göre diğer Combobox’ ta sehirlerin gösterilmesini sağlayacağız. Bunun için comboBox1′ in SelectedIndexChanged event’ ını kullanacağız. Kodlarımızı aşağıdaki şekilde oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter("select * from ilceler where sehir = " + comboBox1.SelectedValue, con); da.Fill(dt); comboBox2.ValueMember = "id"; comboBox2.DisplayMember = "ilce"; comboBox2.DataSource = dt; } } |
İşlem tamam.
Kodlarımızın tamamlanmış hali ve ekran görüntüsü ise ş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 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace il_ilce { public partial class Form1 : Form { public Form1() { InitializeComponent(); } OleDbConnection con; private void Form1_Load(object sender, EventArgs e) { con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=iller.accdb"); DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter("select * from iller ORDER BY id ASC ", con); da.Fill(dt); comboBox1.ValueMember = "id"; comboBox1.DisplayMember = "sehir"; comboBox1.DataSource = dt; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter("select * from ilceler where sehir = " + comboBox1.SelectedValue, con); da.Fill(dt); comboBox2.ValueMember = "id"; comboBox2.DisplayMember = "ilce"; comboBox2.DataSource = dt; } } } } |
Örneği ve veritabanını indirebilirsiniz.
https://yadi.sk/d/-Uf4PmV5qb8fs
System.InvalidOperationException: ”Microsoft.ACE.Oledb.12.0′ sağlayıcısı yerel makine kayıtlı değil.’
Hatası alıyorum
Kodu tamamladığım da combobox2 de ki veriler gözükmüyor.
hocam bir bunun güncelleme yapar mısınız proje ödevi var da aynılarını yaptımda güncelleme dataview anaform da başka formda güncelleme nasıl yaparım seçilen il ilçe görmesi gerekte?
iller.accdb yi iller.mdb olacak şekilde değiştirin..
da.Fill(dt); de hata verıyor hocam comboBox1_SelectedIndexChanged de ki da.Fill(dt); de sebebı nedır? lutfen cevap beklıyorum
“”Gerekli bir veya daha fazla parametre için girilen değer yok.”” böyle bir hata alıyorum
Veritabani sütun isimleri ve sorguda kullandığınız isimleri kontrol edin.
DataTable dt = new DataTable();OleDbDataAdapter da = new OleDbDataAdapter(“select * from ilceler where sehir = ” + comboBox1.SelectedValue, con); “”da.Fill(dt);””
tam olarak burada hata alıyorum ve bir çözüm üretemedim
Bu tarz veya excele bağlanan bir dosya düşünün içinde database mevcut. Benim bir girdim olacak ve onları çağıracak bir program yapmak istiyorum. Aslında yaptım excel’de. Vlookup fonksiyonu ile basit bir şey(sorgu tarzı). Bunu C# yapabilir miyim? Yaparsam 10’dan fazla bilgisayar kullanıcak ve programı onlara yüklediğimde Access veya Excel’deki veri güncellemesinde kullanıcalar update etmek zorunda kalır mı? yoksa otomatik update olur mu?
Yardımcı olursanız çok sevinirim
Kolay Gelsin
çok teşekkürler bu bilgileri paylaştığın için ve veri tabanını 🙂 helal olsun
Her ilçenin en ünlü yemeklerini hazırladığım bir liste olduğunu farz ediyorum ve İl ve ilçeyi seçince label1’e o ilçenin en meşhur yiyeceğini getirmek istiyorum. Bunun kodunu nasıl yazabilirim?? Yardımcı olur musunuz??
İlişkili üç tablo olması gerekiyor. Her ilçeye ait sadece 1 yemek mi listelenecek?
Arkadaşlar bu linkten ben tabloyu indiremiyorum yardımcı olur musunuz?
Link yenilendi. Tekrar indirmeyi deneyebilirsiniz.
Merhaba Ahmet Bey;
Veri tabanındaki kayıtları sırası ile textboxlara aktarmak için örnek arıyorum ama bulamadım. Textboxlara veri aktarımı için örnek çalışmanız var mı ya da bu konuda yardımcı olabilir misiniz?
Merhaba. Alttaki örnek işinize yarar belki. http://www.yazilimkodlama.com/programlama/c-veritabani-baglantisi-ilk-kayit-onceki-kayit-sonraki-kayit-son-kayit/
Merhaba, teşekkür ederim, tam istediğim gibi oldu 🙂
dostum selamlar. sql sorgusunu
“select il from iller ORDER BY id ASC ”
ve
“select ilce from ilceler where sehir = ”
yapınca sorun yaşıyorum ve “da.Fill(dt);” satırında “Gerekli bir veya daha fazla parametre için girilen değer yok.” hatası alıyorum. sebebi ne olabilir? aynı sorguyu accesste çalıştırdığımda hata almıyorum.
Sorguyla ilgili bir hata görünüyor. Sorgunun tamamını yollarsanız daha net anlaşılabilir.
teşekkürler geri dönüş için hocam.
sizin iki sorgunuz sırasıyla şu şekilde;
OleDbDataAdapter da = new OleDbDataAdapter(“select * from iller ORDER BY id ASC “, con);
OleDbDataAdapter da = new OleDbDataAdapter(“select * from ilceler where sehir = ” + comboBox1.SelectedValue, con);
benimkiler ise şöyle;
OleDbDataAdapter da = new OleDbDataAdapter(“select SehirAdi from SehirListesi”, con);
OleDbDataAdapter da = new OleDbDataAdapter(“select IlceAdi from IlceListesi where SehirID = ” + comboBox1.SelectedValue, con);
diğer alanlarda herhangi bir farklılık yok.
select * kullanırsam çalışıyor, ama tablodan belli bir alanı çağırmak istediğimde çalışmıyor.
Projeyi sıkıştırıp yollarsan pazartesi kontrol edebilirim dfsdfsdf.
http://s5.dosya.tc/server/7yi5os/HastaneKayit.rar.html
sorun HastaKayıt formunda hocam. seçilen polikliniğe göre doktor getirmek istiyorum. veritabanı da dosyanın içinde. ilişkilerde sorun yok, polikliniğe göre doktorları görebiliyorum. şimdiden çok teşekkürler.
Merhaba. Projenizdeki sorun PoliklinikGetir metodunda.
//OleDbDataAdapter da = new OleDbDataAdapter(“select PoliklinikAdi from PoliklinikBilgi ORDER BY PoliklinikID ASC”, baglanti);
OleDbDataAdapter da = new OleDbDataAdapter(“select * from PoliklinikBilgi ORDER BY PoliklinikID ASC”, baglanti);
Üstteki sizin yazdığınız kod. Sadece Poliklinik adını çektiğiniz için ID leri almıyor. Select * From ….. olarak değiştirirseniz ilgili doktorlar gelecektir.
lsdflsdfldf salaklığıma gülüyorum ya, o kadar uğraşmama rağmen nasıl fark edememişim. çok ama çok teşekkür ederim hocam, gerçekten çok yardımcı oldunuz 🙂
Sorun değil. Olabilir böyle şeyler. 🙂
Veritabanı adı,Tablo adı ve Alan adlarını doğru yazıp yazmadığınızı tekrar kontrol edin.
hocam öncelikle paylaşım için teşekkür ederim. combobox’ın selectedindex olayına kodları yazdığımda “da.Fill(dt);” satırında “Gerekli bir veya daha fazla parametre için girilen değer yok.” hatası alıyorum. yardımcı olursanız çok memnun olurum. kolay gelsin.