Bundan önceki blogta Ms Access veritabanımızda bulunan birden fazla tabloyu ilişkilerini yapılandırmıştık.İlişkileri kurulmuş beş Ms Access tablomuzu bu kez Visual Studio Net ile geliştirdiğimiz Okul projesi kapsamında,Dataset- Tablo Adapter ile bağlantılar kuracak ve Sql Query denemeleri yapacağız.Bu sayede ilişkisel bir veritabanı kullanarak Asp.Net Web uygulamalarında bu işin nasıl yapılabildiğinede göz atmış olacağız.
Elbette yazı içerisinde geçecek örneklerden beklentimiz basit bir web programını meydana getirmek.Şimdi sizde deneyin...
Başlarken: Ms Access Tabloları arasında ilişki kurmak, bir anlamda ilişki kurulacak birden fazla tabloyu birleştirme işleminden ibarettir.Bu konuda yazdığım ve Ms Access 2010 ve birden fazla tabloları birleştirmek adlı yazıdada yazıldığı gibi ilişkilendirme ile birleştirmenin ana işlevi, verilerimizi yine belirli koşullarda kaydetmek ile aynı mantıkdır.Buna göre Ms Access ile yapılan bu örneklerin bir çoğu Ms Sql 2005 ve 2008 sürümlerindede benzerlik göstermektedir.Bu yazıya yeni rastlamış ve şuana kadar yazılanlar ilginizi çekmiş ise bir önceki blogu okumalı, ve amac senaryonun ne olduğunu tam olarak anlamasınız.İlişkisel tabloların Asp.Net uygulamanızda Dataset - Table Adapter vede Sql Query kısımlarında bilgiye ihtiyacınız varsa okumaya devam edebilirsiniz...
Evet hatırlatmalarımızıda yaptıktan sonra devam eden işimize bir bakalım.Ms Access Database hazır tablolar tamam, o halde şimdiki ilk işimiz Visual Studio aracımızda yeni bir Web Application oluşturmak sonrada
DataSet Eklemek...
Dataset oluşturmak için Visual Studio aracınızda bulunan Web Uygulamanıza "sağ click" ve sonrasında "Add New Item" komutu ile yandaki resimde görülen Dataset' i projeye dahil ediyoruz.Dahil etme işlemi sonrasında App_Code içerisinde hazır bekleyen DataSet'e yine Data Tools(solda) bulunan "TableAdapter" eklemeliyiz.Bu anlatım açık olmasına rağmen, çok hızlı geldiyse ve DataSet- Table Adapter tanımları ile ilgili fazla bilginizde yoksa Visual Studio.Net Ado.Net Veri Kümeleri ve Table Adaptörleri yazısında biraz daha genişletilmiş halde bilgiyi edinebilirsiniz.
Şimdi sırada TableAdapter
Tablo adaptörümüzü DataSet içine (sürükle bırak) eklediğimizde sırasıyla Visual Studio bizden aşağıdakileri sağlamamızı ister !
• Table Adapter hangi veritabanına başvuracak? yani bir ConnectionString gerekli!
• Sonrasındada bu veritabanı içerisindeki hangi tablolara bir bağlantı gerçekleştireceğim?
Şimdi sırasıyla bizden istenen ilk gereksinim olan ve sadece ilk kez bağlantı kurduktan sonra artık bir daha yapmayacağımız veritabanı bağlatımızı yapalım.Bunu yapmanın 2 yöntemi vardır.İlki Dataset içerisine eklediğiniz Table Adapter aracınıda kullanarak App_Data (database dizini) işaret ederek Wizard şeklinde aşamalı olarak sonuca gitmek.İkinci ise proje başlangıcında Web.Config dosyanızda bu işi daha önceden yaparak, bu tür yapılandırma sihirbazlarında kullanmak.Her iki yöntemde geçerlidir, fakat proje başlangıçlarında yani Web.Config içerisinde bu düzeni sağlamak daha makuldür.Ayrıca bu yapılandırma sonrasında bağlantı dizesinin değişimi ile yapacağınız hiç bir Dataset ve Table Adapter artık yanıt vermeyecektir.Ben Web config bağlantı dizisini vererek başlıyorum.
Web.config yapılandıyoruz.
Table Adapter ve Ms Access Tabloları
Örneğimizde yer alan Ms Access Tablo ilişkileri şeması
Bu örnekte Öğretmen' tablosunu ve Sınıflar Tablosunu kullanacak ve ilişkiyle Dataset yapılandıracağız.!
Dikkat edilmesi gereken önemli husus...
""Öğretmenlerin Sınıf öğretmeni olmasını sağlayan "SınıfOgretmenId" verisinin Sınıflar Tablosunda olma zorunluluğu, ilişkisel bir veritabanı işlemine göre, daha önce kaydedilmiş yada kaydedilebilecek durumda olması gerektirir."" Çokta karışık değil...Bunu şu şekilde yapabiliriz. Okuldaki sınıflarını kaydederken, sınıf öğretmeni olması gereken öğretmenin "OgretmenId" verisini DropDownList ile "Control" şeklinde çağırır ve Sınıflar Tablosu kayıtlarını tamamlarız.Nasıl mı?
Öğretmenler Dataset - Table Adapter
Query Builder penceresinde görülen Table Adapter için belirlenmiş Ms Access Öğretmenler Tablosunu sorgusunu oluşturuyoruz.
• DISTINCT ifadesi bu adaptörün listeme yapacağı içindir ve sonradan ifadeye eklenmelidir. Veri Sıralamaları farklı türdede yapılabilir (azalan-artan) bu örnek için şimdilik DISTINCT ile sıralanan Table Öğretmenler yeterlidir.
Sınıflar Dataset - Table Adapter
• Sınıflar Dataset ve Table Adapter için yapılan query ise SELECT sıradan söz dizimi yeterlidir.
İki Table Adapter için yapılan Query çalıştırılarak sorunsuz bir şekilde verilerin alınıp alınamadı kontrol edilerek sorunsuz bir şekilde Builder kapatılmalıdır.
Oluşturulmuş olan Dataset ve 2 adet tablolarımıza başvuran Table Adapter neden farklı sorgu dizimine sahip olduğunu örneğin ilerleyen kısımlarında rahatça anlayacağız.
Dataset içindeki oluşuma bir göz atalım.
Resimdede görelebildiği gibi bir diagram yada ilişkiyi gösteren bir yapının olduğunu anlayabiliriz.Tıpkı Ms Access aracımız ile veritabanı ilişkilerini tasarlarken yaptığımız gibi.Peki ama biz DataSet içerisinde bu türde bir QUERY yazmamıştık! Evet yazmadık ama Ms Access veritabınında yaptığımız PrimaryKey ve ForeignKey (Birincil ve Dışa Anahtar) kullanımı sayesinde, Dataset ve dolayısı ile Table Adapter tarafından öngürülerek ve oluşturulmuş oldu.Visual Studio Web Developer gerecimize bunun için teşekkür ediyor ve yolumuza devam ediyoruz...
Örneğin bu bölümüne kadar artık Ms Access veritabanımızda birbirleri ile ilişki kurulmuş tablolalarımıza başvuran, Dataset ve TableAdapter işlemlerimiz tamamlanmış oldu.! Bundan sonraki kısımda ise bu yaptıklarımızı Web Form üzerinde nasıl kullanacağımıza bakacağız...
İlk olarak kullanıcımız Sınıflar tablosundaki gereken alanların doldurumlası için gerekli Web form'u yapmadan önce bu form içinde olması gereken ve "SınıfOğretmeniId" kayıdını yine Öğretmenler Tablosunundan alacağımızdan, kullanıcılara Öğretmenleri sırasıyla seçebilecekleri bir DropDownList yapmalıyız-ki "Öğretmenler Table Adapter" bunun için tasarlanmıştır.Öğretmenlere ait açılan listemizi 2 farklı yöntemle oluşturduğumu Table Adapter'e başvurmasını sağlayabiliriz.İlki DropDownTask ve Choose Data Source ile, ikincisi ise ulaşacağıız veri kaynağını işaret edeceğimiz kodları DropDownList altına yazarak.Birinci tercih daha basit ve kullanışlı olduğundan şimdi bunu yapalım.
DropDownList - Data Source
Bu komutla oluşturduğumuz Dataset içerisindeki Öğretmenler Table Adapter' e gitmemiz lazım.Sırasyıla Choose Data source - New data source seçimleri ile varacağımız nokta artık "Object" Data source edinmemiz olacaktır.
DropDownList - Object Data Source
Drop Down List yani Öğretmenler için yapılan Açılır listenin Nesne veri kaynağını yandaki resimdeki gibi adlandırıyor ve Wizard işlemini sonlandırıyoruz.Artık son aşamamız ise Dataset içindeki "Business Object" yani iş nesnemizi oluşturmaktır.
DropDownList - Businness Object Source
Yandaki resim yukarıda yaptığımız açıklamalarla Öğretmenler listesi işlemlerin sonuna yaklaşıyoruz
seçtiğimiz OgretmenlerTableAdapter seçiminden sonra sihirbazı tamamlarken hızlıca geçtiğimiz yerde Sql Query ile daha önce oluşturulmuş metodların olup olmadığı SELECT- INSERT- UPTADE- DELETE gibi kayıt işlemleri yapıp yapmayacağımız sorulacaktır.Ama Table Adapter kısmındaki Sql Query dizimimizde "DISTINCT" kullanıdığımız ve DISTINCT ile bu tür kayıt işlemleri yapılamıyacağından işlemimize Drop Down List görevlerini seçmeliyiz.
DropDownList- Field Display & Value
Drop Down List Filed Display - Value nedir ?
Verilerini mevcut veritabanından alan bir DropDownList için en önemli iki paramatre olan, Display görünen veri Value ise Kaynak olacak veridir.Nedemektir bu? örneğimizden anlatmaya çalışırsak; Veritabanında olan Öğretmenlerin AdıSoyadı alanında bulunan veri Web Formda DropDownList'e görüntülenecek. Value yani OgretmenId veriside Web Formda kaydedilmesi için gönderilecektir.Bizim istediğimizde tam olarak budur.Çünkü Sınıf Tablosunda öğretmenin sınıf öğretmeni olabilmesi için OgretmenId(sayı) verisine ihtiyacımız var.Dolayısı ile veritabanımızı Web Form'a en azından öğretmenler kısmında hazırlamış olacağız...
Drop Down List - Test Edelim
Yandaki resimdende anlaşıldığı gibi Dataset-Table Adapter içerisinde yaptığımız bir dizi yapılandırma ile veritabanımızda bulunan birbirinden ilginç isimli Öğretmenlerimiz DropDownList ile listelenmiş oldu.
Kodlarımızıda paylaşalım
Evet bu yazıdada bu kadar ayrıntı yeter...(2) blogtur yaptığımız basit Okul Web uygulaması örneğinin sonuna kadar devam edeceğimizden ve projeyi birlikte tamamlayacağımızdan, bir sonraki (3) ncü "Asp.Net Ms Access" yazısında Sınıflar Web Formu'nu yaparak ilk kayıt işlemimizi tasarlayarak yazacağız.Şimdilik siz bu ve önceki yazıda geçenleri testler yaparak bu zamanı değerlendirebilirsiniz...
Elbette yazı içerisinde geçecek örneklerden beklentimiz basit bir web programını meydana getirmek.Şimdi sizde deneyin...
Başlarken: Ms Access Tabloları arasında ilişki kurmak, bir anlamda ilişki kurulacak birden fazla tabloyu birleştirme işleminden ibarettir.Bu konuda yazdığım ve Ms Access 2010 ve birden fazla tabloları birleştirmek adlı yazıdada yazıldığı gibi ilişkilendirme ile birleştirmenin ana işlevi, verilerimizi yine belirli koşullarda kaydetmek ile aynı mantıkdır.Buna göre Ms Access ile yapılan bu örneklerin bir çoğu Ms Sql 2005 ve 2008 sürümlerindede benzerlik göstermektedir.Bu yazıya yeni rastlamış ve şuana kadar yazılanlar ilginizi çekmiş ise bir önceki blogu okumalı, ve amac senaryonun ne olduğunu tam olarak anlamasınız.İlişkisel tabloların Asp.Net uygulamanızda Dataset - Table Adapter vede Sql Query kısımlarında bilgiye ihtiyacınız varsa okumaya devam edebilirsiniz...
Evet hatırlatmalarımızıda yaptıktan sonra devam eden işimize bir bakalım.Ms Access Database hazır tablolar tamam, o halde şimdiki ilk işimiz Visual Studio aracımızda yeni bir Web Application oluşturmak sonrada
DataSet Eklemek...
Dataset oluşturmak için Visual Studio aracınızda bulunan Web Uygulamanıza "sağ click" ve sonrasında "Add New Item" komutu ile yandaki resimde görülen Dataset' i projeye dahil ediyoruz.Dahil etme işlemi sonrasında App_Code içerisinde hazır bekleyen DataSet'e yine Data Tools(solda) bulunan "TableAdapter" eklemeliyiz.Bu anlatım açık olmasına rağmen, çok hızlı geldiyse ve DataSet- Table Adapter tanımları ile ilgili fazla bilginizde yoksa Visual Studio.Net Ado.Net Veri Kümeleri ve Table Adaptörleri yazısında biraz daha genişletilmiş halde bilgiyi edinebilirsiniz.
Şimdi sırada TableAdapter
Tablo adaptörümüzü DataSet içine (sürükle bırak) eklediğimizde sırasıyla Visual Studio bizden aşağıdakileri sağlamamızı ister !
• Table Adapter hangi veritabanına başvuracak? yani bir ConnectionString gerekli!
• Sonrasındada bu veritabanı içerisindeki hangi tablolara bir bağlantı gerçekleştireceğim?
Şimdi sırasıyla bizden istenen ilk gereksinim olan ve sadece ilk kez bağlantı kurduktan sonra artık bir daha yapmayacağımız veritabanı bağlatımızı yapalım.Bunu yapmanın 2 yöntemi vardır.İlki Dataset içerisine eklediğiniz Table Adapter aracınıda kullanarak App_Data (database dizini) işaret ederek Wizard şeklinde aşamalı olarak sonuca gitmek.İkinci ise proje başlangıcında Web.Config dosyanızda bu işi daha önceden yaparak, bu tür yapılandırma sihirbazlarında kullanmak.Her iki yöntemde geçerlidir, fakat proje başlangıçlarında yani Web.Config içerisinde bu düzeni sağlamak daha makuldür.Ayrıca bu yapılandırma sonrasında bağlantı dizesinin değişimi ile yapacağınız hiç bir Dataset ve Table Adapter artık yanıt vermeyecektir.Ben Web config bağlantı dizisini vererek başlıyorum.
Web.config yapılandıyoruz.
<connectionStrings> <add name="AccessConnection" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database.accdb;Persist Security Info=True" providerName="System.Data.OleDb" /> </connectionStrings>Yukarıdaki işleme geri dönersek artık AccessConnection isimli ConnectionString bağlantı nesnesini Table Adapter içerisindeki konfigrasyon sihirbazına gösterebiliriz.
Table Adapter ve Ms Access Tabloları
Örneğimizde yer alan Ms Access Tablo ilişkileri şeması
Bu örnekte Öğretmen' tablosunu ve Sınıflar Tablosunu kullanacak ve ilişkiyle Dataset yapılandıracağız.!
Dikkat edilmesi gereken önemli husus...
""Öğretmenlerin Sınıf öğretmeni olmasını sağlayan "SınıfOgretmenId" verisinin Sınıflar Tablosunda olma zorunluluğu, ilişkisel bir veritabanı işlemine göre, daha önce kaydedilmiş yada kaydedilebilecek durumda olması gerektirir."" Çokta karışık değil...Bunu şu şekilde yapabiliriz. Okuldaki sınıflarını kaydederken, sınıf öğretmeni olması gereken öğretmenin "OgretmenId" verisini DropDownList ile "Control" şeklinde çağırır ve Sınıflar Tablosu kayıtlarını tamamlarız.Nasıl mı?
Öğretmenler Dataset - Table Adapter
Query Builder penceresinde görülen Table Adapter için belirlenmiş Ms Access Öğretmenler Tablosunu sorgusunu oluşturuyoruz.
• DISTINCT ifadesi bu adaptörün listeme yapacağı içindir ve sonradan ifadeye eklenmelidir. Veri Sıralamaları farklı türdede yapılabilir (azalan-artan) bu örnek için şimdilik DISTINCT ile sıralanan Table Öğretmenler yeterlidir.
Sınıflar Dataset - Table Adapter
• Sınıflar Dataset ve Table Adapter için yapılan query ise SELECT sıradan söz dizimi yeterlidir.
İki Table Adapter için yapılan Query çalıştırılarak sorunsuz bir şekilde verilerin alınıp alınamadı kontrol edilerek sorunsuz bir şekilde Builder kapatılmalıdır.
Oluşturulmuş olan Dataset ve 2 adet tablolarımıza başvuran Table Adapter neden farklı sorgu dizimine sahip olduğunu örneğin ilerleyen kısımlarında rahatça anlayacağız.
Dataset içindeki oluşuma bir göz atalım.
Resimdede görelebildiği gibi bir diagram yada ilişkiyi gösteren bir yapının olduğunu anlayabiliriz.Tıpkı Ms Access aracımız ile veritabanı ilişkilerini tasarlarken yaptığımız gibi.Peki ama biz DataSet içerisinde bu türde bir QUERY yazmamıştık! Evet yazmadık ama Ms Access veritabınında yaptığımız PrimaryKey ve ForeignKey (Birincil ve Dışa Anahtar) kullanımı sayesinde, Dataset ve dolayısı ile Table Adapter tarafından öngürülerek ve oluşturulmuş oldu.Visual Studio Web Developer gerecimize bunun için teşekkür ediyor ve yolumuza devam ediyoruz...
Örneğin bu bölümüne kadar artık Ms Access veritabanımızda birbirleri ile ilişki kurulmuş tablolalarımıza başvuran, Dataset ve TableAdapter işlemlerimiz tamamlanmış oldu.! Bundan sonraki kısımda ise bu yaptıklarımızı Web Form üzerinde nasıl kullanacağımıza bakacağız...
İlk olarak kullanıcımız Sınıflar tablosundaki gereken alanların doldurumlası için gerekli Web form'u yapmadan önce bu form içinde olması gereken ve "SınıfOğretmeniId" kayıdını yine Öğretmenler Tablosunundan alacağımızdan, kullanıcılara Öğretmenleri sırasıyla seçebilecekleri bir DropDownList yapmalıyız-ki "Öğretmenler Table Adapter" bunun için tasarlanmıştır.Öğretmenlere ait açılan listemizi 2 farklı yöntemle oluşturduğumu Table Adapter'e başvurmasını sağlayabiliriz.İlki DropDownTask ve Choose Data Source ile, ikincisi ise ulaşacağıız veri kaynağını işaret edeceğimiz kodları DropDownList altına yazarak.Birinci tercih daha basit ve kullanışlı olduğundan şimdi bunu yapalım.
DropDownList - Data Source
Bu komutla oluşturduğumuz Dataset içerisindeki Öğretmenler Table Adapter' e gitmemiz lazım.Sırasyıla Choose Data source - New data source seçimleri ile varacağımız nokta artık "Object" Data source edinmemiz olacaktır.
DropDownList - Object Data Source
Drop Down List yani Öğretmenler için yapılan Açılır listenin Nesne veri kaynağını yandaki resimdeki gibi adlandırıyor ve Wizard işlemini sonlandırıyoruz.Artık son aşamamız ise Dataset içindeki "Business Object" yani iş nesnemizi oluşturmaktır.
DropDownList - Businness Object Source
Yandaki resim yukarıda yaptığımız açıklamalarla Öğretmenler listesi işlemlerin sonuna yaklaşıyoruz
seçtiğimiz OgretmenlerTableAdapter seçiminden sonra sihirbazı tamamlarken hızlıca geçtiğimiz yerde Sql Query ile daha önce oluşturulmuş metodların olup olmadığı SELECT- INSERT- UPTADE- DELETE gibi kayıt işlemleri yapıp yapmayacağımız sorulacaktır.Ama Table Adapter kısmındaki Sql Query dizimimizde "DISTINCT" kullanıdığımız ve DISTINCT ile bu tür kayıt işlemleri yapılamıyacağından işlemimize Drop Down List görevlerini seçmeliyiz.
DropDownList- Field Display & Value
Drop Down List Filed Display - Value nedir ?
Verilerini mevcut veritabanından alan bir DropDownList için en önemli iki paramatre olan, Display görünen veri Value ise Kaynak olacak veridir.Nedemektir bu? örneğimizden anlatmaya çalışırsak; Veritabanında olan Öğretmenlerin AdıSoyadı alanında bulunan veri Web Formda DropDownList'e görüntülenecek. Value yani OgretmenId veriside Web Formda kaydedilmesi için gönderilecektir.Bizim istediğimizde tam olarak budur.Çünkü Sınıf Tablosunda öğretmenin sınıf öğretmeni olabilmesi için OgretmenId(sayı) verisine ihtiyacımız var.Dolayısı ile veritabanımızı Web Form'a en azından öğretmenler kısmında hazırlamış olacağız...
Drop Down List - Test Edelim
Yandaki resimdende anlaşıldığı gibi Dataset-Table Adapter içerisinde yaptığımız bir dizi yapılandırma ile veritabanımızda bulunan birbirinden ilginç isimli Öğretmenlerimiz DropDownList ile listelenmiş oldu.
Kodlarımızıda paylaşalım
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="OgretmenList_DataSource" DataTextField="AdıSoyadi" DataValueField="OgretmenId"> </asp:DropDownList> <asp:ObjectDataSource ID="OgretmenList_DataSource" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData_ListOgretmens" TypeName="AccessDataSetTableAdapters.OgretmenlerTableAdapter"> </asp:ObjectDataSource>
Evet bu yazıdada bu kadar ayrıntı yeter...(2) blogtur yaptığımız basit Okul Web uygulaması örneğinin sonuna kadar devam edeceğimizden ve projeyi birlikte tamamlayacağımızdan, bir sonraki (3) ncü "Asp.Net Ms Access" yazısında Sınıflar Web Formu'nu yaparak ilk kayıt işlemimizi tasarlayarak yazacağız.Şimdilik siz bu ve önceki yazıda geçenleri testler yaparak bu zamanı değerlendirebilirsiniz...
Bu Yazının Sponsorları
Yorumlar
Yorum Gönder