C# da access veri tabanı ve combobox
-
14 Aralık 2011 Çarşamba 10:55Herkese iyi günler,
Elimde Accsess veri tabanı var ve C# da yaptığımız arayüz ile bu veri tabanını süzdürmemiz gerekiyor.
Veri tabanında bir tek tablo var ve bunun adı tablo1. Bu tablo1 de sınıf, altsınıf, takım, familya, cins, tür gibi sütunlar var. Benim sorum, C# da yaptığımız arayüzde her bir sütun için açılan comboboxllar ile bu veri tabanını süzmek. örneğin, Sınıfı "Incesta" ve altsınıfı "Pterygotav" ve takımı "Blattoptera" olan verileri veri tabanından seçip arayüzde gridwievda göstermeli.
Yardımlarınız için şimdiden çok teşekkür ederim. İyi çalışmalar
- Taşıyan Emre GunerturkModerator 14 Aralık 2011 Çarşamba 12:24 (Gönderen:Visual Basic.NET)
Tüm Yanıtlar
-
14 Aralık 2011 Çarşamba 11:52
Sayın firatseker,
Formun bu kısmı vb.net ile ilgilidir. Sorunuzu C# bölümüne sorarsanız daha hızlı yanıt bulabilirsiniz.
İyi çalışmalar
-
14 Aralık 2011 Çarşamba 15:53Yanıtlayıcı
Oncelikle, Access kullanmak zorunda misin? En kotu secimlerden birisi bence. Keske baska birsey kullansaydin (bir suru zero config secenek var). Cevabin evet oldugunu farzediyorum ve kulagimi tersten gosteriyorum (LinqToolkit'i indirebilirsin, onda Access linq provider ve Northwind veri tabani ile ornekler var. O zaman cok daha kolay olur):
DataTable tbl = new DataTable(); using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbLocation + ";User Id=admin;Password=;")) { OleDbCommand cmd = new OleDbCommand("select * from Boceklerim",con); con.Open(); tbl.Load(cmd.ExecuteReader()); con.Close(); } string sinif = "Incesta"; string altsinif = "Pterygotav"; string takim = "Blattoptera"; var s0 = tbl.AsEnumerable(); // tamami // sinif var s1 = s0.Where (t => string.IsNullOrEmpty(sinif) || t.Field<string>("Sinif") == sinif ); // sinif + altsinif var s2 = s1.Where (t => string.IsNullOrEmpty(altsinif) || t.Field<string>("AltSinif") == altsinif ); // sinif + altsinif + takim var s3 = s2.Where (t => string.IsNullOrEmpty(takim) || t.Field<string>("Takim") == takim );
Notlar:1) Access kullandigini ve Access icin herhangi bir Linq provider kullanmadigini farzettim.
2) Untyped oldugunu farzettim (yoksa t.Field<string> ... seklinde olmayacakti, Intellisense ile property seklinde eklenecekti onlar)
3) Dogrudan SQL yerine Linq kullandim. SQL kullanmak basta daha cazip gorunebilir ama uzun vadede zahmetli.
4) Tek satirda degil N satirda olmasinin nedeni progressif sorgulamayi orneklemek ve kodu daha okunur tutmak icin. SQL ile yapsaydin da buna benzer progressif bir SQL yapman iyi olacakti (sinif, takim ... secilmedigi durumlari hesaba kattik yani)
5) LinqToolkit kullanirsan orada Access provider var. Uzun vadede cok daha rahat bir Linq kullanimi olur ve buradakinin aksine uygulaman insert/update/delete ozelliklerine de cok rahat kavusmus olur.
6) Basta tum tablo hafizaya (DataTable'a) aliniyor. Bunu yapmak buyuk datada hic de iyi bir sey olmazdi ama Access kullandigina gore zaten cok kucuk datayla calistigini farzettim. Degil ise mutlaka LinqToolkit kullan. O zaman AsEnumerable() gerekmeyecek ve IQueryable kullanmis olacaksin (basitce anlami, data gercekten enumeration icin istenene kadar gelen birsey yok, sadece filtreli data istiyorsun).
7) Access kullanmak zorunda misin:) Degilsen yol yakinken baska birsey kullanmaya basla. SQLite SQL Server express veya CE, diger herhangi bir RDBMS veya noSQL database.
- Yanıt Olarak İşaretleyen Emre GunerturkModerator 19 Aralık 2011 Pazartesi 07:22
-
16 Aralık 2011 Cuma 10:26Moderatör
Fırat Bey merhabalar,
Önerileri değerlendirebildiniz mi? Son durumu bizimle paylaşırsanız çok sevinirim.
İyi çalışmalar.
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
Facebook Üzerinden Takip Et!
Twitter'da Takip Et!