Giriş
Günümüzde bir çok web uygulaması verilerini arka planda veri kaynaklarında saklamaktadır.
Ziyaretçi bir sayfayı görmek istediğinde öncelikle veri kaynağından ziyaretçinin
istediği bilgiler okunur ve sayfada bu bilgiler kullanıcıya gösterilir. Aslına veri
kaynağından bilgi gösterme web uygulamaları veya ADO.NET ile gelen bir yenilik değildir,
bu tip uygulamalar oldukça eskiye dayanmaktadır. İlk uygulamaların yazıldığı 60'lardan
itibaren yazılmış çoğu uygulamada en az bir adet veri kaynağı kullanıldığını görebiliriz.
Veri kaynaklarında veri tutmanın avantajı adından da anlaşılacağı gibi uygulamayı
kullanan firma için çok değerli olan bilgilerin bir kaynakta uzun zaman saklanabilmesidir.
Hatta veri kaynağı olarak ileri seviye veritabanı sunucuları kullanarak verilerin
kaybolması ihtimali sıfıra yakın olabilmektedir.
Ne yazıkki sıfır veri kaybı ihtimali yoktur. En güvenli sistemlerde bile veri kaybolma
olasılığı vardır
Veri kaynaklarında veri tutmanın diğer bir avantajı; veri ve uygulama katmanı ayrı
olduğu için verilerin başka uygulamalar da kullanabilmesidir (Reusability). Ayrıca
ilişkisel veritabanların özelliği olan triggers , stored procedure ve relations'larla
kod ile yazması oldukça zahmetli olan bazı işlemler veritananı katmanında yapıldığı
için yazılan kod miktarı oldukça azalmaktadır. Bu uygulamanın bakım işini kolaylaştırmaktadır.
Veri Kaynağından Veri Gösterimi Hayat Döngüsü
Veri kaynağından veri gösterme 3 aşamadan oluşur. Bu 3 aşama genellikle tüm programlama
dillerinde bulunur. Bu üç aşama;
- aşamada veri kaynağına bağlantı yapılır. Veri kaynağını bir banka ve uygulamayı
bankanın müşterisi olarak düşünürsek, bağlantı yapılması müşterinin bankanın adresini
bulup bankaya gitmesi, görevliye kendini tanıtıcı belgeleri göstermesi (hesap cüzdanı,
nufus cüzdanı gibi ) ve görevlinin gelen kişinin müşteri olarak kabul etmesine kadar
olan aşamalar olarak düşünebiliriz.
Bu aşamada olabilecek hatalar, kişinin gittiği adreste bankanın bulunmaması ( yanlış
bağlantı yolu verilmesi) veya kişinin banka müşterisi olmamasıdır. (veri kaynağının
kullanıcı adı ve şifresinin yanlış yazılması).
- aşama olarak veri kaynağına sorgu cümleleri gönderilir. Banka ve müşteri örneğinden
devam edersek sorgu göndermek banka görevlisine yapmak istediğimiz işlemleri söylemektir.
Bankada yapılan bazı işlemlerde - havale yapmak veya para yatırmak gibi- müşteriye
sadece işlemin yapıldığını belirten bir belge döndürülür. Bazı işlemlerde ise -
para çekmek gibi- müşteriye belgenin yanında para gibi bazı nesneler verilir.
Veri kaynakları ile yapılan işlemlerde de durum oldukça benzerdir. Bazi işlemlerde
- veri yazma, silme, güncelleme- uygulamaya sadece işlemin başarıyla yapılıp yapılmadığı
bilgisi döndürülür. Bunun yanında bazı işlemler -veri okuma gibi- uygulamaya istenen
verileride döndürür.
Bu aşamada karşılaşabilinecek hatalar, müşterinin hatalı bir işlem yapmak istemesi
durumu (hesabında olan paradan daha fazla para çekmek istemesi gibi) veya müşterinin
yapmak istediği işlemi yanlış belirtmesidir (havale yapacağı hesap numarasını yanlış
belirtmesi gibi). Aynı şekilde veri kaynağından da benzer sebeplerden dolayı hatalar
gelebilir.
- ve son aşama veri kaynağından alınan bilgilerin teker teker okunup uygulamada kullanıcıya
gösterilmesidir. Banka örneğinden devam edersek alınan paranın harcanması olarak
düşünülebilinir. Veri kaynağından veri gelmediği durumlarda ise genellikle kullanıcıya
isleminiz başarıyla tamamlanmıştır gibi bir mesaj verilir.
ADO.NET Nedir?
ADO.NET Microsoft tarafından geliştirilen ve bir veri kaynağı ile iletişimi sağlayan
kütüphanedir. Az önce bahsedildiği gibi veri kaynağı bağlantısı üç aşamadan oluşmaktadır.
ADO.NET içerisinde bulunan veri sağlayıcılarında bulunan sınıf ve metodlar, bu üç
aşamayı yerine getirmek için kullanılır.
DİKKAT:
ADO.NET sınıflarının başında "ADO" gibi bir belirteç yazılmadığından ilk defa veri
tabanı programı yapan geliştiriciler ADO.NET kütüphanesini hiç kullanmadığını sadece
ASP.NET kütüphanesi kullandığını düşünebilirler. Fakat bu çok büyük ihtimalle yanlış
bir düşüncedir ve uygulamada kullanılan veri tabanı bağlantısı yapan veya sorgu
göndermeye yarıyan sınıflar ADO.NET'e ait sınıflardır.
ADO.NET 'in getirmeye çalıştığı; tüm veri kaynaklarına standart bir yöntemle başlanmaktır.
Yani veri kaynağı oracle, mssql gibi veri tabanları olsun veya düz metin dosyası
olsun, ADO.NET benzer yollarla farklı veri kaynaklarında benzer işlemleri yapmaya
olanak sağlar. Bu işlem birazdan anlatılacak olan data provider'lar ile sağlanmaktadır.
Kısa Bir Tarihçe
Aslında veri kaynaklarına ulaşımı standartlaştırma çalışmalarının 20 yıla yakın
bir geçmişi vardır. Önceden her bir veri kaynağı için birbirinden alakasız sınıf
ve metodları kullanmak gerekliydi. Standartlaşma adına ilk adım ODBC (Open Database
Connectivity) ile getirildi. ODBC, veri kaynaklarına ulaşmak için geliştirilen ortak
bir dildir ve ilk olmasının avantajını kullanarak şu ana kadar bir çok uygulamada
kullanıldı ve bir çok veritabanı odbc uyumlu kütüphanelerini yazdı.
ODBC'nin dezavantajı oldukça alt seviye bir standart olmasıydı. Daha kolay bir standart
oluşturmak için Microsoft OLE DB standartını getirdi. OLE DB kullanması daha kolay
bir standarttır. Günümüzde bir çok veritabanı firması OLE DB standartında yazılmış
kütüphanelerini piyasaya sürmüştür.
Yeni standartlar çıktıkça bu standartları kullanan ortak standart yeni kütüphaneler
geliştirme gereği duyuldu. Bunun için Microsoft ilk önce UDA (Universal Data Access)
kütüphanesini geliştirdi. Bunun ardından ADO kütüphanesini geliştirdi. ADO kütüphanesi
ASP 'de kullanılmak için geliştirilen bir kütüphanedir. Son olarak Microsoft ADO'yu
oldukça geliştirerek ADO.NET kütüphanesini .NET framework ile çıkardı.
ADO.NET ile veri tabanına ister ODBC ile başlanılsın , ister OLE DB ile başlanılsın
veya istenirse Oracle veya MSSQL'de olduğu gibi kendi veritabanı bağlantı kütüphaneleri
kullanılsın, aynı standart metodlar ve sınıflar ile veri kaynağına veri işlenir
veya kaynaktan okunur.
Data Providers ( Veri Sağlayıcıları)
Önceden bahsedildiği gibi hangi veri tabanı olursa olsun, veri kaynağı ile yapılan
işlemler 3 aşamadan oluşuyor. Bunlar bağlantı açma, sorgu gönderme ve sorgu sonucunu
işlemedir. ADO.NET'te bulunan her bir data provider'da bu üç aşama için hazırlanan
standart sınıf ve metodlar vardır.
Örnek olarak ODBC veri sağlayıcısında, veri tabanı bağlantısı yapan System.Data.Odbc.OdbcConnection
sınıfı bulunur. Aynı zamanda OLE DB data provider'ında, veri tabanı bağlantısı yapan
System.Data.OleDb.OleDbConnection sınıfı vardır. ADO.NET 'te tüm işlemler standart
metod isimleriyle yapıldığından, her 2 sınıfın bağlantı açan Open() metodu ve bağlantı
kapatan Close() metodları vardır.
Hazır Data Providerlar ( Veri Sağlayıcıları)
Microsoft .NET framework kütüphanesinde hazır olarak gelen 5 adet veri sağlayıcısı
vardır. Her bir data provider bir adet name space (ad alanı) ve onun içerisindeki
sınıflar ile belirlenir. ADO.NET'te hazır olarak gelen data provider'lar.
|
Veri Sağlayıcı Adı |
Açıklama |
Desteklenen Bazı Veritabanları |
|
System.Data.Odbc |
ODBC desteği olan veritabanlarına bu veri sağlayıcı ile bağlanabilinir. |
- DB2
- My Sql
- Paradox
- Access
- Excel
|
|
System.Data.OleDb |
OLEBD desteği olan veritabanlarına bu veri sağlayıcı ile bağlanabilinir. |
- Interbase
- Access
- MS Sql server
- Oracle
|
|
System.Data.OracleClient |
Sadece Oracle veritabanına başlanmak için Microsoft tarafından çıkarılan veri sağlayıcı. |
|
|
System.Data.SqlClient |
Sql server'a (SQL Server CE hariç tüm versiyonlar) başlanmak için geliştirilen veri
sağlayıcı. |
|
|
System.Data.SqlServerCe |
SQL Server CE'ye (mobil araçlar için geliştirilen Sql Server sürümü) başlanmak için
geliştirilen veri sağlayıcı. |
|
|
Tablo 1: ADO.NET'te hazır olarak gelen veri sağlayıcıları.
|
Veri sağlayıcılarını sadece bir veri kaynağı için yapılan özel veri sağlayıcıları
ve bir çok veri kaynağına hitap eden genel veri sağlayıcıları olarak 2'ye ayrılır.
Özel veri sağlayıcıları sadece belli bir veritabanı için optimize olarak geliştirildiğinden
genellere göre oldukça hızlıdır. Bu yüzden öncelikle -e?er varsa- kullanacağımız
veri kaynağının özel veri sağlayıcısını araştırmamız gerekir, eğer yoksa kullanacağımız
veri kaynağının OLE DB veya ODBC desteklediğini araştırıp bunlara ait genel veri
kaynaklarını (System.Data.OleDb, System.Data.Odbc) kullanmamız gerekir.
İPUCU:
ADO.NET içerisinde bulunan 5 adet veri sağlayıcının yanynda isteyen kendi veri sağlayınıcı
yazabilir. Bazı firmalar ( Oracle gibi) ADO.NET için kendi veri sağlayıcılarını
yazmıştır. Bunun için yapılması gereken bazı ADO.NET interface sınıflarının (IConnection,
ICommand gibi) türetip, bu interface sınıflarında bulunan metodları istediğimiz
veri tabanına özel olarak geliştirmektir. Tüm veri sağlayıcıların sınıfları IConnection,
ICommand gibi standart interface sınıflarından türetildiği için, bu sınıflardaki
metod isimleri hep aynıdır.
DİKKAT:
Her ne kadar Microsoft tarafından Oracle için yazılmış veri sağlayıcısı var ise
de Oracle geliştiricilere kendi veri sağlayıcısını ( Oracle Data Access Component)
kullanmasını tavsiye ediyor. Oracle'ın kendi veri sağlayıcısı ADO.NET içerisinde
hazır olarak bulunmuyor. Oracle'ın sitesinden indirilip projelere gerekli ddl dosyalarının
referans olarak eklenmesi gerekmektedir.
Veri Sağlayıcılarında Bulunan Ortak Sınıflar
Daha önce bahsedildiği gibi veri kaynağı ile yapılan işlemler 3 adımdan oluşmaktadır.
1. aşama olarak veri kaynağıyla bağlantı yapılır, 2. aşamada veri kaynağına sorgu
gönderilir ve son aşamada veri kaynağından gelen bilgiler okunur. Tüm veri sağlayıcılarında
bu üç aşama için sınıflar vardır. Bu sınıflardan;
Connection sınıfı 1. aşama için kullanılır. Bu sınıf ile veri kaynağına bağlantı
yapılır.
Command sınıfı 2. aşama için kullanılır. Bu sınıf ile veri kaynağına sorgu
cümleleri gönderilir. Sorgu cümleleri parametre alabilirler, bu parametreler Parameter
sınıflarıyla eklenir.
DataReader sınıfı 3. aşama için kullanılır. Sorgudan dönen sonuç satır satır
bu sınıf sayesinde okunur.
DataAdapter sınıfı da 3. aşama için kullanılır. Bu sınıfın DataReader'dan
farkı bu sınıftan dönen veriler satır satır okunmaz, onun yerine veriler DataSet
adında bir sınıfa konulur. DataSet sınıfından istenilen zamanda veriler okunabilinir.
DataSet sınıfı veri sağlayıcılarının bir sınıfı değildir. Verileri sunucu hafızasında
tutmak için kullanılır. DataSet nesnesi diğer makalelerde detaylı şekilde anlatılacaktır.
Exception sınıfları veri sağlayıcısı sınıflarında yapılan işlemlerde bir
hata olduğunda veri sağlayıcısı tarafından fırlatılır.
Bu ortak sınıflar tüm veri sağlayıcı ad alanlarında bulunur. Genellikle isimlerinin
başında veri sağlayıcısının adı bulunur.
|
Veri Sağlayıcı |
Connection Sınıfı |
Command Sınıfı |
DataReader Sınıfı |
DataAdapter Sınıfı |
|
System. Data. Odbc |
OdbcConnection |
OdbcCommand |
OdbcDataReader |
OdbcData Adapter |
|
System. Data. OleDb |
OleDbConnection |
OleDbCommand |
OleDbDataReader |
OleDbData Adapter |
|
System. Data. OracleClient |
OracleConnection |
OracleCommand |
OracleDataReader |
OracleData Adapter |
|
System. Data. SqlClient |
SqlConnection |
SqlCommand |
SqlDataReader |
SqlData Adapter |
|
System. Data. SqlServerCe |
SqlCeConnection |
SqlCeCommand |
SqlCeDataReader |
SqlCeData Adapter |
|
Tablo 2: Veri sağlayıcılarının ortak sınıfları.
|
Data Source Kontrolleri
Data Source kontrolleri ADO.NET 2.0 ile beraber gelmiştir.Data Source kontrollerinin özelliği, veri kaynağından bilgi göstermek için gerekli 3. aşamayı kendi içerisinde yapmasıdır. Yani Data Source kontrolü kendi içerisinde veri tabanına başlantı yapar, veri tabanına sorgu gönderir ve sorgudan gelen sonucu Data Set'e veya DataReader sınıfına aktarır.
Data Source kontrollerinin amacı geliştiricileri "syfyr-kod" 'a yakınlaştırmaktır. Sıfır-kod Microsoft'un uygulamaları en az kod ile geliştiricilere yazdırmaya çalışmasıdır. Data Source kontrolleriyle daha önceden 3-5 satır kod ile yapılan işlemler, 1 satırda yapılabilmektedir.
Data Source kontrolleri , veri sağlayıcılarla karıştırmamak gerekir. Data Source kontrolleri aslında kendi içerisinde veri sağlayıcıları kullanır. Veri sağlayıcıların içerisindeki Connection, command ve diğer sınıfları kullanır fakat bu işlemler uygulama geliştirici tarafından görülmez. Ayrıca data source kontrollerine öğrenip veri sağlayıcıları öğrenmemek ileride sıkıntı yaratabilir.
Sonuç
Bu makalemizde ADO.NET kütüphanesine giriş yaptık. ilerideki makalelerde veri sağlayıcılarını örneklerle daha detaylı olarak göreceğiz.
Referanslar
- MSDN
- MCTS Self-Paced Training Kit (Exam 70-536): Microsoft .NET Framework 2.0 Application
Development Foundation,Tony Northrup, Shawn Wildermuth and Bill Ryan,Microsoft Press
2006
- ASP.NET 2.0 Unleashed,Stephen Walther,Sams 2006 2006
- Beginning ASP.NET 2.0 Databases From Novice to Professional,Damien Foggon,Apress 2006

[
31.05.2007]