Makale Özeti

Hala ADO ile çalışan yazılım geliştiriciler için .NET ile veri erişiminde sağlanan yenilikleri özetleyen bir yazı

Makale

ADO’dan ADO.NET’e geçişte yenilikler ve karşılaştırmalar

 

ADO.NET teknolojisi hakkında ufak bir önsözle giriş yapmak istiyorum yazıma. Ama ADO.NET nedir , yenir mi , içilir mi gibi bir açıklamayla değil. Çünkü okuyacağınız yazılar ADO.NET ve data erişimiyle yeni tanışan arkadaşları zorlayacak nitelikte. Daha çok ADO teknolojisinden ADO.NET’e geçmekte zorlanan kişileri düşünerek (ki yakın bir zamana kadar aynı sıkıntıyı ben yaşıyordum) yazdığım bir yazı bu. Kendim ve çevremdeki arkadaşlarımın geçiş döneminde yaşadığı sıkıntıları temel alarak en merak edilen konuları en anlaşılabilir biçimde sizlere aktarmaya çalışacağım.

 

Aklınıza hiç şöyle bir soru geldi mi: “Neden ADO yeni bir versiyonla karşımıza çıkmadı da (mesela 2.8 yada 3.0 gibi) yepyeni bir teknoloji halinde ADO.NET ismiyle piyasaya sürüldü?” Aslında bunun nedeni temelde biz programcıların ADO’nun nimetlerinden tam anlamıyla yararlanmıyor olmamız. Dikkat ettiyseniz yararlanamıyor değil yararlanmıyor diyorum. Çünkü ADO basitliği nedeniyle bizim biraz nankörlük ederek kullandığımız bir teknolojiydi.

Mesela sadece rapor alacağımız zamanlarda bile recordseti performans artışı için “Forward only” ve “Read only” olarak kullanmamız gerektiği yerde “Dynamic” modda açarak kendi programımızı yavaşlatır; “amaaan nede olsa çalışıyor işte…” düşüncesiyle gerisini düşünmezdik (söz meclisten dışarı :) ). Bir de ADO teknolojisinde Firewall’lardan veriye erişmeye çalıştığımızda sorunlarla karşılaşıyorduk. Bu durumda ADO haketmediği kötü bir üne sahip oldu. Microsoft bizleri bu tembellikten kurtarmak ve en üst düzeyde performansla veriye erişebilmek için her işlem için ayrı komutlar ve nesneler geliştirdi ve ADO.NET’in XML temelli bir yapıya bürünerek firewall problemlerini ortadan kaldırması, veri paylaşımında endüstri standardının kullanmasını sağladı. Ayrıca çok genel kullanımı olan SQL Server 7.0 ve üzerindeki versiyonlar için veri erişiminde özel olarak optimize edilmiş bir bağlantı seçeneğimiz de bulunuyor. Bu ve bunun gibi yenilikler ADO.NET’in yeni bir sürüm olarak değil yeni bir teknoloji olarak karşımıza çıkmasını sağladı.

 

Her ne kadar öğrenmesi ADO’ya göre biraz daha zor ve karışık gözükse de aslında temel mantığını anladıktan sonra herkesin rahatlıkla kullanabileceği ve kullanmayı da çok seveceği bir teknoloji ADO.NET. İsterseniz şimdi ADO ve ADO.NET teknolojileri arasındaki temel farkları yada diğer bir deyişle yenilikleri gözden geçirelim.

 

 

Verilerin Memory’den gösterilmesi

 

ADO’da recordset’teki veriler sürekli database’e bağlanılarak gösterilirdi. ADO.NET’te ise bu durum değişti ve dataset adında yeni bir nesne karşımıza çıktı. İki teknoloji arasında önemli farklılıklar bulunmakta. Mesela dataset teknolojisi tamamen disconnected (bağlantısız) yapıda bulunması veriye bir kez bağlantı kurduktan sonra gelen verilerin XML tabanlı olarak client memory’sinden kullanılması gibi. Şimdilik bunları bilgi olsun diye yazıyorum; bütün bu yapıları ADO.NET’I anlatırken göreceğiz. Onun için herşeyi şimdi öğrenmeye çalışıp kafanızı karıştırmayın :)

 

Tablo Sayıları

 

Bildiğiniz gibi ADO teknolojisinde her recordset bir tabloyu ifade etmekteydi. Dolayısıyla kullanacağımız her tablo için yeni bir recordset açmak zorundaydık. Ayrıca tablolar arasında ilişki kurmak istiyorsak JOIN ifadeli bir SQL cümlesi kurup recordsetimizi bununla doldurmamız gerekiyordu.

Fakat artık Dataset denilen yeni bir nesnemiz var. Dataset’leri birden çok tabloyla doldurabilir, yeni tablolar tanımlayarak database’de varolmayan ama hafıza’dan direkt kullanılabilen tablolar oluşturabilir, hatta bu tablolar arasında ilişki kurabilirsiniz.

 

 

Datalar arasında dolaşma ve Cursor’lar

 

Bir recordset’te varolan kayıtların arasına dolabilmek için kullandığımız MovePrevious, MoveNext, MoveLast gibi method’lar; ayrıca recorset’i listeleyebilmek için döngü içerisine koyarak sürekli EOF kontrolü yapmak artık yok. Cursor’lar (kayıtları update etmeyi sağlayan yada bir başka kullanıcının yaptığı değişikliği bize aktarmayı sağlayan) ADO.NET’te yerini daha performanslı genel olarak Data Class adı verilen methodlara bıraktı. Mesela DataReader  objesi Forward Only ve Read Only veri erişimi için optimize edildi.

Azaltılmış Açık Bağlantılar

 

ADO veriye erişirken sürekli database ile bağlantısını açık tutar. Her ne kadar bağlantısız yapıda erişmek için gerekli yapıyı içinde barındırsa da birincil olarak sürekli bağlantı kurmak üzerine tasarlanmıştır. ADO.NET ise bağlantı yapısını kendi içerisinde Connected ve Disconnected (bağlantılı ve bağlantısız) olmak üzere ikiye bölmüştür.

 

Uygulamalar Arasında Veri Paylaşımı

 

Uygulamaların veri alış-verişi XML tabanlı ADO.NET’te daha kolay bir hale getirilmiştir. ADO veri aktarımında bir component’den ötekini çağırırken COM Marshalling adı verilen teknolojiyi kullanır. ADO.NET ise dataset’le beraber XML Stream kullanıyor.

           

·         Geliştirilmiş Data Tipleri,

 

COM Marshalling belirli sayıda data tipine destek verebiliyordu (COM standartlarına göre olanlarda). ADO.NET ise veri tipini XML formatında belirterek kullanıyor. Böylece kullanılan uygulama ile database tipi arasındaki uyumsuzluk gideriliyor.

 

·         Performans

 

Büyük bir ADO recordset’indeki veri yada büyük bir ADO.NET Dataset’indeki veri network kaynaklarını zorlayabilir. Tabiiki her ikisinde de bunu en aza indirecek yöntemler mevcut fakat ADO’da veri COM data tiplerine çevirilirken ADO.NET’in performans farkı veri tiplerinin çevrilmeye ihtiyaç duymamasında. 

 

·         Firewall’lardan geçme

 

Bildiğiniz gibi firewall’ların çoğunluğu HTML ve text tabanlı geçişler yapmaya izin verir. Bunun anlamı Sistem çağrısı yapan (COM Marshalling) istekler reddedilir.

Fakat ADO.NET dataset’leri XML kullanır ve text yapıda oldukları için firewall’lardan sorunsuzca geçebilirler.

 

 

 

 

Mehmet ÇAKOĞLU

Solution Developer - S&T Turkey

 

Mehmet.cakoglu@protek.com.tr

mehmetcakoglu@msn.com

ICQ UIN# 44859105