Giriş
ActiveZ'e gelen e-postalardan, Web geliştiricilerin çoğunluğunun bir veri tabanı tablosundan kayıt okumak, tabloya kayıt yapmak, kayıt güncellemek ve silmek gibi temel veri işlemleri üzerine yoğunlaştığı anlaşılıyor. Bu durum esasen son derece doğal bir şey! Çünkü, Web uygulamalarının çoğunda şu veya bu şekilde herhangi bir veritabanı kullanılması gerekiyor.
ActiveZ'in bu makalesinde veritabanı işlemlerine hızlı bir başlangıç yapılması amaçlanarak, basit bir Access tablosundan verilerin nasıl okunacağı örneklenecektir. Hem de, ASP programcılarının çok yakından tanıdıkları Visual Basic (VB ) kodları kullanılarak.
Veritabanı Yapısı
Şimdi, kurgu olarak basit bir Türkçe-İngilizce sözlük hazırlayacağımızı varsayalım. Sözlük veritabanımızın adı ise Sozluk.mdb olsun. Bunun için Microsoft Access'a girip yeni bir veritabanı oluşturup ismini Sozluk.mdb olarak değiştirmek gerekir (Goruntu 1 ). Şimdi ise, Sozluk veritabanında aspnet adında yeni bir tablo yaratalım. Bu tabloya ait yapı aşağıda Tablo 1 görülmektedir. Tablo 1 incelendiğinde, ID alanı bir tarafa bırakılırsa, fTurkce ve fIngilizce adlarında metin türünde iki alan tanımlandığı görülebilir. Bu alanlardan, fTurkce kayıt yapılan herhangi bir ASP.NET teriminin Türkçesini; fIngilizce ise İngilizcesini içerecektir. Tablo yaratıldıktan sonra, veritabanımızı Web uygulamamızın bulunduğu klasör giriş düzeyinin (root ) altında data adında bir alt klasöre koyduğumuzu varsayarak kod yazımına geçelim.
Görüntü 1. Sozluk.mdb Access Veritabanı - aspnet Tablosunun Oluşturulması
Tablo 1. Sozluk.mdb Access Veritabanı - aspnet Tablosunun Yapısı
Alan Adı Türü Boyut Açıklama
ID Otomatik Sayı n/a Kayıt sıra no
fTurkce Metin 100 Türkçe sözcük
fIngilizce Metin 100 İngilizce karşılığı
Veritabanından Okuma
Veritabanımızda aspnet tablosunda bulunan kayıtları okumak ve bir HTML tablosu şeklinde görüntülemek için oluşturduğumuz kod listesi yada asp.net sayfası aşağıda Liste 1'de görülmektedir.
Liste 1. VTBVeriOku1.aspx kod listesi
<!--Aşağıdaki kodda yer alan sıra numaraları açıklama amacıyla kullanılmış olup
gerçek ASP.NEt sayfasında kullanılmamalıdır. -->
1 <%@ Import Namespace="System.Data" %>
2 <%@ Import Namespace="System.Data.ADO" %>
3 <html>
4 <script language="VB" runat="server">
5 Dim dsSozluk as DataSet
6 Dim dscSozluk as ADODataSetCommand
7 protected sub Page_Load(Src as object, E as EventArgs )
8 Dim conBaglantim as ADOConnection
9 conBaglantim= New ADOConnection("DRIVER={Microsoft Access Driver (*.mdb )}; DBQ=" & server.mappath("/data/sozluk.mdb" ) )
10 dscSozluk = new ADODataSetCommand("SELECT * FROM aspnet", conBaglantim )
11 dsSozluk = new DataSet( )
12 dscSozluk.FillDataSet(dsSozluk, "Sozcukler" )
13 Dim drSozcuk as DataRow
14 Response.Write("<TABLE BORDER=1 WIDTH=100>" )
15 For Each drSozcuk In dsSozluk.Tables("Sozcukler" ).Rows
16 Response.Write("<TR>" )
17 Response.Write("<TD>" + drSozcuk("fTurkce" ).ToString( ) + "</TD>" )
18 Response.Write("<TD>" + drSozcuk("fIngilizce" ).ToString( ) + "</TD>" )
19 Response.Write("</TR>" )
20 Next
21 Response.Write("</TABLE>" )
22 end sub
23 </script>
24 <body>
25 </body>
26 </html>
Liste 1'in 1. ve 2. satırlarında, System.Data ve System.Data.ADO ad-uzaylarının dışalım direktifi ile sayfaya yerleştirildiği görülmektedir. Burada, ASP.NET ile gelen iki adet sağlayıcıdan (SQL ve ADO veri sağlayıcıları ) ADO'nun kullanıldığı görülmektedir. ADO sağlayıcısı, SQL Server verileri dışındaki diğer tüm veritabanları için kullanılan bir veri sağlayıcısıdır. (Bu konuda daha geniş bilgi için ActiveZ'te bulunan .Net Çatısında ADO+ ve C# (Bölüm 1 ) başlıklı makaleyi okuyabilirsiniz ). Örneğimizde kullanmayı tasarladığımız veritabanı bir Access veritabanı olduğundan SQL sağlayıcı yerine ADO sağlayıcı kullanılmıştır.
ASP.NET sayfamızın 4.-23. satırları arasında bir betik (script ) bulunmaktadır. Betiğin dili, language="VB" atamasıyla Visual Basic olarak belirlenmiştir (Bu makalenin bir de C# sürümü hazırlanmaktadır ). ASP programcılarının çoğu VB kullandığı için bu ilk veritabanı makalesinde betik dili olarak VB dili seçilmiştir.
Program kodunun 5. satırında dsSozluk adında bir veri kümesi (dataset ); 6. satırında ise dscSozluk adında bir veri kümesi komutu (datasetcommand ) tanımlanmıştır. Veri kümesi komut türünün ADO olduğuna dikkat ediniz. Eğer, söz konusu veri kümesi SQL Server tab arı için kullanılsaydı SQLDataSetCommand şeklinde tanımlanacaktı.
Programın 7.-22. satırlarında bir alt yordam (subroutine ) yer almaktadır. Page_Load adındaki bu altyordam ASP.NET'in sağladığı kolaylıklardan biri olup aspx sayfasının yüklenmesi sırasında otomatik olarak çalıştırılır. Böylece, sayfa yükleme sırasında yapılacak tüm işlemleri programlamak olanaklı hale gelmektedir. Gerçi bu özellik ASP'de bulunuyordu, ancak sadece MS Internet Explorer ile etkinleşebiliyordu. Halbuki, ASP.NET ile runat=server özelliği çözümleme işlemini istemci yerine sunucuda yapılmasını sağlandığından artık istemci tarayıcısının ne olduğunun hiçbir önemi yoktur.
Programın 8. satırında bir conBaglantim adında bir bağlantı nesnesi yaratılmakta ve 9. satırda bu nesneye New ADOConnection("DRIVER={Microsoft Access Driver (*.mdb )}; DBQ=" & server.mappath("/data/sozluk.mdb" ) ) ataması yapılarak bağlantı bilgisi aktarılmaktadır. Bu satırda sozluk.mdb veritabanın Web kökü altında data adında bir klasörde olduğu varsayılmaktadır.
Liste 1'in 10. satırında daha önce 6. satırda tanımlanan dscSozluk adındaki veri kümesi komutu çalıştırılmaktadır. Burada eşitliğin sağ tarafında bulunan ADODataSetCommand yöntemine ilk sırada SELECT * FROM aspnet şeklinde basit bir SQL sorgu cümlesinin, ikinci sırada ise bağlantı adının parametre olarak gönderildiği görülmektedir.
11. satırda ise veritabanından SQL sorgusuyla döndürülen kayıtların yerleştirileceği bir veri kümesi yaratılmaktadır. 12. satırdaki kodla dscSozluk veri kümesi komutunun veri doldurma (FillDataSet ) ) yöntemi ile okunan kayıtlar dsSozluk veri kümesine aktarılmakta ve bu kümede oluşan tabloya Sozcukler adı verilmektedir.
13. satırda ise daha sonra For...Next döngüsünde kullanılacak olan drSozcuk adında bir veri sırası (datarow ) nesnesi tanımlanmaktadır.
Evet, geldik işin sonuna! Kodun geri kalanındaki Response.Write'ları açıklamaya herhalde gerek yoktur. (Ama ASP'ye yeni başlayıp ta bu makaleyi okuyan birileri için: Response nesnesinin Write yöntemi parantezler arasındaki verileri istemciye gönderir ). Program kodunun 14. satırında bir HTML tablosu (TABLE ) başlatılmakta ve 21. satırda ise sonlandırılmaktadır. Bu tablonun sıralarında ve sütunlarında bulunacak veriler ise 15. satırda başlatılıp 21. satırda sonlandırılan For...Next döngüsü ile üretilmektedir.
...
15 For Each drSozcuk In dsSozluk.Tables("Sozcukler" ).Rows
16 Response.Write("<TR>" )
17 Response.Write("<TD>" + drSozcuk("fTurkce" ).ToString( ) + "</TD>" )
18 Response.Write("<TD>" + drSozcuk("fIngilizce" ).ToString( ) + "</TD>" )
19 Response.Write("</TR>" )
20 Next
...
Program kodumuzun 15. satırda başlatılan For...Next döngüsü, dsSozluk veri kümesinde 12. satırda yaratılan Sozcukler veri tablosununun herbir sırası (veya satırı ) için tekrarlanmaktadır. Bu işlem dsSozluk.Tables("Sozcukler" ).Rows ifadesindeki sıralar (Rows ) özelliği ile sağlanmaktadır. Program kodunun 16. satırında herbir döngü turu için bir HTML sırası (TR ) oluşturulmakta ve 19. satırda ise sonlandırılmaktadır.
Yukarıdaki kodun 17. ve 18. satırlarında ise veri kümesi sıralarında yer alan alanlardaki veriler tablo hücrelerinde (TD ) görüntülenmektedir. Burada dikkat edilirse kullanılan sözdizimi drSozcuk("fTurkce" ).ToString( ) şeklindedir. drSozcuk hatırlanacağı üzere 14. satırda tanımlanan ve 15. satırda döngü değikeni olarak kullanılan veri kümesi sıralarına verilen addır. drSozcuk veri sırasında bulunan fTurkce alanının içeriği drSozcuk("fTurkce" ) şeklinde elde edilmekte ve .toString ile dizilim (string ) türüne dönüştürülerek görüntülenmektedir.(fTurkce alanında zaten dizilim türünde veri olduğundan bu dönüştürünün yapılmasına gerek olmamakla birlikte sadece örnekleme amacıyla burada verilmesi uygun bulunmuştur. ) 18. satırda ise aynı işlem fIngilizce alanı için yapılmaktadır.
Döngü işlemi dsSozluk veri kümesinin Sozcukler tablosunda bulunan tüm veri sıraları için tamamlandığında sona erer. Uygulamamıza ait örnek görüntü aşağıda Görüntü 2'de gösterilene benzer şekilde elde edilir.
Görüntü 2. VTBVeriOku1.aspxsayfa çıktısı örneği
Sonuç
ASP.NET'te kullanılan ADO+, veritabanı işlemlerini oldukça kolaylaştırmış, ne dersiniz? Burada sadece basit bir örnekleme yapılmasına karşın yeni veri nesne modeli ADO+'ın sunmuş olduğu avantajların ne denli güçlü ve etkin olduğu anlaşılabilmektedir. Bu makalenin ilerde SQL veri sağlayıcı için bir sürümü yayınlanacaktır. Şimdilik biraz ADO+'ya şöyle bir ısının hele...
Kolay gelsin.
|