Makale Özeti

Bu makalade dataset ve datatable kavramlarını inceliyoruz.

Makale

DataSet Nedir?

Dataset Veritabanınızdan bağlantısız olan çalışan bir nesnedir. Saf XML tabanlı yapısı sayesinde web formları ve DotNet componentleri ile kusursuz bir entegrasyon sağlar. Bir kez veritabanına bağlandıktan sonra veriyi alır ve bağlantıyı keser. Elinizde Excel tablosuna benzer bir veri yığını olur. Aslında çok daha gelişmiş bir yapıdır ama bunu biraz daha ileride işleyeceğiz. Bu Excel tablosuna benzer yapıda; veriler üzerinde değiştirme, silme gibi işlemleri yapabildiğiniz gibi yeni kayıt da ekleyebilirsiniz. Bütün bunları yaparken databasee herhangi bir bağlantı kurmaz. Ancak siz ona kayıtları databaseden güncelleme komutu verdiğinizde bağlantıyı kurar ve işlemi gerçekleştirir. Bu Serverın kaynaklarını daha düzgün kullanmak için çok iyi bir yoldur.

Datasetler Server-Client tabanlı Windows uygulamaları geliştirdiğinizde .NET Framework altyapısı sayesinde programınız çalıştığı sürece serverdan dataset e çekilen bilgileri Clientın memorysinde XML olarak Cachete tutar. Fakat bu durum web uygulamalarında biraz değişiyor. Dataset kendisini bu sefer server üzerinde cachelenen bir nesne olarak gösteriyor. İstekte bulunduğunuz data server üzerinde bir kez bağlantı kurulduktan sonra aynı bağlantıdan gelen istekler Server cacheinden karşılanıyor.

Daha önceki yazımda dataset hakkında ufak bir bilgi verirken bu örneği kullanmıştım ama önceki makalemizi okumayanlar için tekrar yazmak istiyorum :

Farzedelim ki sizin yazdığınız Server-Client tabanlı bir uygulama var. Satış grubunuzdan birisi Laptopuyla (bu bilgisayarın laptop olması örneğimiz açısından önemli) servera network vasıtasıyla bağlandı ve ürünlerinizin fiyat listesini programdan çağırdı. Sayfalar halinde, belki 1000 tane ürün listelendi (bütün listeyi bir anda ekrana getirmediğimize dikkatinizi çekerim.). Fiyat listesi dataset sayesinde Clientın memorysinde cachelenmiş oldu. Üzerinde istediği değişiklikleri yaptı ve network kablosunu çıkartarak server ile olan bütün bağlantısını kesti. Sonra satış yapmak üzere müşterisine gitti. Eeee??? Şimdi ne olacak? Normalde bütün bağlantıyı kestiği için ekran üzerinde gözükmeyen kayıtlara ulaşamayacak değil mi?

Hayır ulaşacak ! İşte Dataset in güzelliği burada; bütün bu data client memorysinde cachelenmiş durumda. Yani müşterisinde, sanki kendi networküne bağlıymışcasına ürünlerini görebilecek ve bilgilerini müşterilere aktarabilecek.

Web uygulamalarında Windows uygulamalarına benzer biçimde Client Cacheinin kullanımına başlanması için Microsoftun native .NET Framework destekli bir browser sürümü çıkarması gerekiyor galiba


DataSet ve Verileriniz Arasındaki Köprü : DataADAPTER !

Önceki makalemizde okuduğunuz gibi Command nesnesi yardımıyla DataReader kullanarak sorgu gönderip sonucunu alabiliyorduk. Tabiiki istersek DataSetimize veri doldurmak için DataReader nesnesini kullanabiliriz, ama bu pek kullanışlı bir yol olmaz. Üstelik DataSet için Disconnected (Bağlantısız) yapıya uygun başka bir nesne geliştirilmiş olmalı değil mi? Peki DataSet kullanmak istediğimizde ne yapmalıyız? İşte sorumuzun cevabı : DataAdapter !

DataAdapter Nedir?

DataAdapter nesnesi Connected ve Disconnected bağlantı yapısı ile veri arasında köprü vazifesi görür. Databaseinizden çektiğiniz veriyi DataSetinize doldurmak yada DataSetinizde güncellenerek cachelenmiş verilerinizi veri kaynağınızda da güncellemek için istediğiniz zaman DataAdapter nesnesini kullanabilirsiniz. Güncelleme işlemlerini daha ileri konuları içeren makalelerimizde göreceğiz. Konuyu daha fazla dağıtmamak için şu anda bu nesnenin DataSet ile kullanımı ve veriye erişim konuları üzerinde yoğunlaşmalıyız.

Bilmeniz gereken bir-iki ufak ayrıntı da şunlar:
- DataAdapter Disconnected Data ile çalışmak için tasarlanmıştır.
- DataAdapter ve DataSet arasında direkt olarak bir bağlantı yoktur.

DataAdapter ile DataSete veri doldurulurken database bağlantısı kapalı ise açılır, dataset doldurulur ve işlem bittiği anda otomatik olarak kapatılır. Eğer bağlantı halihazırda açıksa herhangi bir hata vermeden işlemi yapar ve bağlantıyı kapatarak işlemini sonlandırır. Böylece bizlerin de fazla detayla uğraşmadan hızlıca işlemlerimizi yapmamızı sağlar.

Kullanımına gelince; Temelde iki adet argüman alır. Bunlardan birincisi DataSete doldurmak istediğimiz veriyi belirten "SELECT * from Nothwind" gibi bir SQL cümlesidir. Ikincisi ise bağlantıyı açıp veriyi almasını ve bağlantıyı kapatmasını sağlayan Connection String adını verdiğimiz databasee bağlantı cümlesidir. Son olarak DataSete veriyi doldururken de Fill() methodu kullanılır.

Aşağıdaki paragrafta DataAdapterin temel olarak kullanımına dair örneği göreceksiniz.


DataSet Oluşturma ve DataTable yapısı

Dataset deyince aklımıza bir yapı daha gelmeli: DataTable !
Hatırlarsanız makalenin başında DataSetden bahsederken Excele benziyor demiştim. Şimdi bunu açıklamanın vakti geldi. Dataseti bir excel dosyasına, DataTableı ise Excel içerisindeki WorkSheetlere benzetebiliriz dersem herhalde DataSet yapısı aklınızda daha iyi oluşur.
Datatable, Datasetin içerisinde birden fazla bulunabilen, kayıtların tutulduğu tablolardır. Dataset, DataTablelara bir kap vazifesi görüyor; onları yeniden oluşturup birbirine kopyalayabiliyor, aynı dataset içerisinde bulunan DataTablelar arasında ilişki kurabiliyor, hatta database olmadan direkt olarak cachede DataTablelar yaratabiliyor. Bu durum bizi elektronik ticarette alışveriş sepeti tarzında uygulamalar oluştururken bayaa rahatlatacak bir teknik. Tabii sadece bu bir örnek, kullanım alanının sınırsız olduğunu düşünüyorum. Bunun yanında sıralama, arama ve filtreleme özellikleri de var.

Bir Dataseti oluşturduğunuz anda veritabanındaki bir tabloyu yada sorgu sonucunu atayabilirsiniz. Bu durumda Dataset kendi içerisinde otomatik olarak bir tablo oluşturacaktır.

Şimdi bir DataSet nasıl oluşturulur görelim:


[Visual Basic]
Dim Dset as New DataSet("DataSet_ismi")

[C#]
Dataset Dset = New DataSet("DataSet_ismi")

Yukarıda gördüğünüz gibi bir datasetin oluşturulması oldukça basittir. İsterseniz örneği daha kullanılabilir bir hale getirelim.
Dataseti oluşturduktan sonra veri ile dolduralım ve elimizde disconnected ham veri bulunsun.


[Visual Basic]

Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB;Data Source=Localhost;" & _
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
strSQL = "SELECT * FROM Customers"
Dim da As New OleDbDataAdapter(strSQL, strConn)
Dim dset As New DataSet()
da.Fill(dset, "Customers")

[C#]

string strConn, strSQL;
strConn = "Provider=SQLOLEDB;Data Source=Localhost;" +
"Initial Catalog=Northwind;Trusted_Connection=Yes;";
strSQL = "SELECT * FROM Customers";
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, strConn);
DataSet dset = new DataSet();
da.Fill(dset, "Customers");


Örnekteki adımları biraz açıklayalım isterseniz.

Satır 1 : Dim strConn, strSQL As String

strConn ve strSQL değişkenleri String veri tipinde tanımlanıyor.

Satır 2 : strConn = "Provider=SQLOLEDB;Data Source=Localhost;" & _
"initial Catalog=Northwind;Trusted_Connection=Yes;"

strConn değişkenine SQL Server a ulaşabilmesi için bağlantı dizesi atanıyor. Artık Northwind databaseine bağlanabiliriz.

Satır 4 : strSQL = "SELECT * From Customers"

strSQL değişkenine SQL Server bağlanıldığında databaseden hangi verilerin çekileceğini söyleyen Transact SQL dizesi atanıyor.

Satır 6 : Dim da As New OleDbDataAdapter(strSQL, strConn)

"da" adıyla yeni bir data adapter oluşturuluyor. Datasetimiz ile SQL server arasında bağlantıyı bu nesne sağlıyor. strSQL ve strConn değişkenlerindeki bilgileri kullanarak data adapterimize bağlantıyı nasıl kuracağını anlatmış olduk.

Satır 7 : Dim dset As New DataSet()

"dset" adıyla DataSetimiz oluşturuluyor. Şu anda sadece bir nesne olarak oluşturuldu ve içerisinde herhangi bir data barındırmıyor.
Satır 8 : da.Fill(dset, "Customers")

Data Adapter nesnemiz "Fill" metodunu kullanarak Datasetimizin database bağlantısını gerçekleştiriyor (6. satırda nasıl bağlandığı anlatılıyor) ve elde ettiği veriyi DataSet içerisine "Customers" adında bir tablo oluşturarak dolduruyor.


Artık elinizde verilerinizi rahatlıkla görüntüleyebileceğiniz bir DataSetiniz var.

Peki DataSetimiz ne işe yarayacak? Bunu nasıl kullanabiliriz? Aşağıdaki örnekte de DataSetimizi bir DataGrid de nasıl gösterebileceğimiz örnekleniyor.


[Visual Basic]

Dim ds As DataSet = new DataSet()
Da.Fill(ds)

Datagrid1.DataSource = ds
Datagrid1.DataBind()

[C#]

ds DataSet = new DataSet();
Da.Fill(ds);

Datagrid1.DataSource = ds;
Datagrid1.DataBind();

DataSetimizi DataAdapter yardımıyla doldurduktan sonra DataGrid1 isminde bir datagrid oluşturduğumuzu farzedelim. Datagridimizin datasourceunu datasetimiz olarak belirtiyoruz ve DataBind() methodu ile veriyi datagridimizle birleştirmiş oluyoruz. (DataBind() methodunu sadece ASP.NET ile uygulama geliştirirken kullanıyoruz. Windows uygulamalarında bu methodu kullanmaya gerek yok, aklınızda bulunsun.)


Artık bağlantıların temel yapısı hakkında bir altyapı oluşturabildiğimizi düşünüyorum. Bundan sonraki yazılarımda insert, delete, update gibi temel database işlemlerini anlatacağım. Böylece database uygulamalarını yeni yazmaya başlamış arkadaşlar da örnekler sayesinde daha rahat işlerini yapabilecek. Onlardan sonra ise ADO.NETde kullanılan nesnelerin detaylı özellikleri geniş açıklamalı makaleler halinde gelecek.
Yani katedecek daha çok mesafemiz var. Eğer bizi bu yolda yanlız bırakmaz ve bilginizi bizlerle paylaşırsanız çok mutlu oluruz. ADO.NET hakkında yazdığınız makaleleriniz, ipuçlarınız varsa lütfen bize gönderin; sizin için yayınlayalım. Bilgi paylaşımı adına, çorbada sizin de tuzunuz bulunsun :

Bir dahaki yazıda görüşmek üzere…


Mehmet ÇAKOĞLU
Solution Developer - S&T Turkey

Mehmet.cakoglu@protek.com.tr
mehmetcakoglu@msn.com
ICQ UIN# 44859105