.NET'te Veri Erişimi : ADO.NET
Her şey gibi ADO da büyük evrimden (veya hafif devrimden)
nasibini aldı. DAO ve ADO derken şimdi ADO.NET''le yüzyüzeyiz.
Microsoft''un veri erişimi için sunduğu yeni ara katman olan ADO.NET, bir çok
heyecan verici yenilikle geliyor. Yazımızda ADO.NET''i ve getirilerini aktarmaya
çalışacağız.
ASP veya VB ile uğraşanlar ADO''yu çok iyi biliyorlar.
.NET''e kadar, veritabanlarına, veri yığınlarına erişim için uygulama
geliştiricilerin kullandığı en yeni ara katman ADO (ActiveX Data Objects)
idi. ADO, gerçekten işleri çok basitleştirmişti. Her türlü veritabanı erişimi
için aynı nesne setini kullanmak, veritabanı ile ilgili detayın sadece bir
bağlantı cümlesine hapsedilmesi ADO''nun çarpıcı özellikleriydi. ADO, Windows
bünyesine yüklenen bir COM bileşeni idi. Gayet anlaşılır nesne modeli ile bizi
OLEDB sağlayıcıları ve ODBC sürücülerinin daha karmaşık olan
modelinden uzak tutarak, kolayca veritabanı operasyonları yapmamızı mümkün
kılıyordu.
Artık karşımızda yepyeni bir veri erişim servisi var:
ADO.NET. ADO.NET, sonuna eklenen "nokta net" ten gayet iyi
anlaşılacağı gibi .NET bünyesinde bir teknoloji. Yani .NET uygulaması geliştiren
bir programcının veriye erişmek için kullandığı her şey ADO.NET''in parçası
olacak. ADO.NET, Framework sınıf kütüphanesinde çeşitli aduzaylarından ve
bunlara bağlı düzinelerce sınıftan oluşan bir alt set.
ADO.NET elbette
ki ADO''nun kullanımında yaşanan güçlüklere çözüm getiriyor ve bunun yanında eski
nesne modelini de kısmen koruyor. Kısaca bakalım:
* ADO.NET,
veriyi XML ile içiçe bir yapıda ifade ediyor. Bu yeni yapının adı
DataSet. Bir dataset standart XML formatında ifade edilebiliyor. Tersi de
aynı derecede kolay bir işlem. ADO''da XML desteği kısıtlı düzeydeydi.
*
ADO ile genelde veri operasyonları aktif bir bağlantı üzerinden gerçekleşirdi.
Şimdi ADO.NET bağlantısız operasyonlara tam destek veriyor. Verilerle
işinizi, veri kaynağına en az seviyede erişerek halledebiliyorsunuz. Bu
kabiliyet, yine DataSet nesnesi üzerinde. Tüm bunlar ADO.NET''in kalbinin DataSet
nesnesi olduğunu anlatmaya yetiyor.
* ADO da veritabanı bağlantıları
OLEDB sağlayıcıları üzerinden gerçekleşiyordu. Bir Access veritabanına bağlanmak
da, bir SQL Server veritabanına bağlanmak da aynı köprüden geçmemizi
gerektiriyordu. Şimdi ADO.NET, SQL Server''le direk konuşabilen bir nesne
topluluğuna sahip. OLEDB ile klasik bağlantı şansınız devam ederken, size
iyilenmiş bir SQL Server erişimi de sunuluyor.
Veri sağlayıcıları biraz
açalım.
Sağlayıcılar, veri kaynaklarına bağlantı kurar, komut icra ettirir, onlardan sonuç setleri getirirler. Kısaca veri kaynağı ile uygulamanız arasında bir köprüdür. (.NET veri sağlayıcılarına, Managed Data Providers da denilmektedir.)
.NET, bünyesinde iki tane sağlayıcı ile geliyor: OLEDB .NET Veri Sağlayıcısı ve SQL Server .NET Veri Sağlayıcısı. İlkinin bildiğimiz OLEDB''nin .NET uyarlaması olduğu belli. Asıl dikkat çekici olan ikincisi. Bu sağlayıcı Microsoft SQL Server 7 ve üst sürümleri için optimize edilmiş. Microsoft, SQL Server 7 ve yukarısıyla çalışacaksanız bu sağlayıcıyı kullanmanızı öneriyor. Zira bu sağlayıcı, SQL Server ile en alt seviyede, yani TDS (Tabular Data Stream) protokolüyle konuşuyor. Bu da size performans kazancı olarak dönüyor. Bir sevindirici haber de geçen haftalarda geldi. Artık Oracle veritabanları için de spesifik bir .NET sağlayıcısı mevcut.
OLEDB''nin çıkışıyla geri plana çekilen ODBC (Open Data Base Connectivity) teknolojisinin akıbetini merak edenler yok mu? Microsoft, ODBC için de bir .NET sağlayıcısı yazdı. Ama bu .NET''in standart sağlayıcıları arasında gelmiyor. Ayrıca edinmeniz gerekiyor. (http://msdn.microsoft.com/downloads)
Bilmemiz gereken bir başka önemli nokta da, her veri sağlayıcısının Framework sınıf kütüphanesinde farklı aduzayları (namespace) ile temsil ediliyor oluşu. OLEDB sağlayıcısı için System.Data.OleDb, SQL Server sağlayıcısı için de System.Data.SqlClient aduzayını kullanacağız. ADO.NET ile ilgili temel sınıfların da System.Data aduzayında bulunduğunu hatırlatalım.
ADO.NET mimarisini ikiye ayırarak incelemek gerekiyor. Biri bağlantılı, diğeri bağlantısız taraf. Bağlantılı taraf, bir .NET veri sağlayıcısının üzerinden yapılan bağlantıyla çalışan nesneleri içeriyor. Connection, Command, DataRader, DataAdapter bu nesnelerin başlıcaları. Bu nesnelerin ortak özelliği, aktif bir bağlantıya ihtiyaç duymaları. Diğer tarafta, bağlantısız bir yapı var: DataSet. DataSet, veri kaynağı bağlantısından bağımsız olarak tasarlanan bir nesne. Hafızada duran ve istendiğinde XML olarak kalıcı hale getirilebilen ilişkisel bir veritabanı olarak düşünebilirsiniz. Zira DataSet, birden fazla tablolar içerebiliyor; bu tablolar arası ilişkiler, kısıtlamalar, görünümler tanımlamanıza olanak veriyor.
Bu mimariyi en iyi, dokümantasyondan aldığım aşağıdaki diyagram özetleyecek:

Görüldüğü gibi, bağlantısız veriyi ifade eden DataSet nesnesi, bağlantılı tarafa DataAdapter nesnesiyle ulaşıyor. Ve bir DataSet, tek metodla disk üzerinde bir XML dosyasında saklanabilecek veya bir XML dosyasından vücut bulabilecek esneklikte.
.NET''in XML desteği had safhada olan veri erişim mimarisine verdiği isim ADO.NET. Bu mimari, Framework sınıf kütüphanesinde bir çok aduzayı ve düzinelerce sınıfla temsil ediliyor. ADO.NET, eski versiyonu ADO''dan farklı olarak bağlantısız veri operasyonlarına tam destek veriyor. Bu iş için DataSet adında iddialı bir nesnesi var.
Bu yazımızda, ADO.NET''i konsept düzeyinde anlatmaya çalıştık. İlerleyen haftalarda, tek tek bu mimariyi oluşturan nesneleri, uygulama örnekleriyle beraber işleyeceğiz.
İyi çalışmalar.
