DataSet Nedir? Nasıl kullanılır?

DataSet nesnesi herhangi bir veri kaynağı ile ilişkilendirilmiş veri kümesini temsil eder. Bu veri kaynağı bir veritabanı olacağı gibi XML formatlı bir kaynakta olabilir. Nitekim DataSet nesnesinde tutulan veriler hafızada XML formatında tutulmaktadır. DataSet içindeki veriler aynen veri tabanında olduğu gibi tablolar şeklinde saklanır. Yani bir DataSet nesnesi bir yada birden fazla tablo barındırabilir. DataSet’in yapısındaki tablolar DataTable isimli sınıfla temsil edilir. Bu da DataSet’in DataTable türünden nesneleri olan bir kolekesiyona sahip olduğunu gösterir. Bu koleksiyonun adı Tables’ dır. Tables koleksiyonun Add() ve Remove() metotları kullanılarak DataSet’e yeni tablo eklenip çıkarılabilir. Tables koleksiyonundaki tablolara indeksleyici yardımıyla erişilebilir. İndeksleyincinin parametresi tablonun ismi olabileceği gibi tablonun DataSet’teki sıra numarası da olabilir.6

Her bir DataTable nesnesinin Rows ve Columns koleksiyonu bulunmaktadır. Rows koleksiyonu DataTable’daki kayıtların kümesidir. Bu kümedeki her bir kayıt ise DataRow isimli sınıfla temsil edilir. Bir kayıttaki veriler sütunlara ayrılmıştır. Bir kayıt birden fazla sütundan oluşmuştur. Dolayısıyla her bir kaydın ilgili sütununa erişmek için DataRow sınıfındaki indeksleyici kullanılır. DataTable’da olduğu gibi indeksleyicinin parametresi sütunun adı yada sıra numarası olabilir.

DataSet nesnesinde veri ile direkt ilişkili olan bu nesnelerin yanı sıra ilişkisel veri tabanı modelinin gerektirdiği yapıları barındırmak içinde çeşitli sınıflar vardır. Bu sınıflardan en önemlisi DataRelation ve Constraint sınıfıdır. İki tür Constraint(kısıt) sınıfı vardır. Bunlar UniqueConstraint ve ForeignKeyConstraint sınıflarıdır. Constraint sınıfları temel olarak verinin tablolara yerleştirilme kurallarını belirler. Örneğin UniqueConstraint tablodaki bir kaydın tekil olmasını sağlarken, ForeignKeyConstraint sınıfı birbirleriyle ilişkili tablolardan birinde meydana gelen değişikliğin diğerinde nasıl bir etki yaratacağını belirler. DataTable nesnelerinin Constraints isimli koleksiyonuna oluşturulan bu Constraint nesneleri aktarılarak kısıtların çalıştırılması sağlanır. Dikkat edilmesi gereken nokta kısıtların çalışması için DataSet’in EnforceConstraints özelliğinin true olması gerektiğidir. Diğer bir önemli sınıf ise DataRelation sınıfıdır. Bu yazıda DataRelation detaylı bir şekilde anlatılacaktır. Bundan sonraki yazımda ise Constraint sınıfları üzerinde duracağım.6

Yukarıda bahsi geçen bütün sınıflar verinin hafızada modellenmesi için gerekli olan sınıflardır. Tüm bunlar için verinin DataSet içine doldurulması gereklidir. DataAdapter bir DataSet’in yada DataTable’ ın içini doldurmak için veri kaynağı ile bağlantı kurar. Bu işlemi yapan DataAdapter sınıfının Fill() metodudur. Bu metot parametre olarak bir DataSet nesnesi alabileceği gibi DataTable nesnesi de olabilir. Eğer paramatre bir DataSet nesnesi ise DataSet nesnesi içinde yeni bir DataTable nesnesi oluşturulur ve veriler bu nesneye aktarılır. Veri kaynağına DataAdapter ile erişirken dikkat etmemiz gereken önemli bir nokta var : Her DataAdapter nesnesi ile ancak bir DataTable nesnesi oluşturulabilir. Dolayısıyla birden fazla tablo içeren DataSet nesneleri ile çalışmak için birden fazla DataAdapter nesnesi oluşturmalıyız. DataSet içinde yapılan değşikliklerin orjinal veri kaynağında güncellenmesi içinde DataAdapter kullanılır. DataAdapter’in güncellenen verileri düzgün bir biçimde ele alabilmesi için UpdateCommand, InsertCommand ve DeleteCommand gibi özelliklerinin belirtilmesi gerekir. Command nesneleri bir SQL dizgesi ve Connection nesnesi ile kurulur.

Nasıl Kullanılır?

DataSet Oluşturma

DataSet nesnesinin bir örneği yaratılacağı zaman DataSet constructor’ı kullanılır. Yeni bir DataSet nesnesi yaratırken isterseniz parametresiz çağırarak taban constructor’ını kullanabilirsiniz veya kendiniz bu metodu overload edebilirsiniz bu durumda ise constructor’e DataSet nesnesinin adını parametre olarak gönderirsiniz. Aşağıda bu iki durumun kullanımı gösterilmiştir.

Dim dataSet as DataSet = new DataSet();  Taban constructor’ı kullanılmış

Dim dataSet as DataSet = new DataSet(“ornekDataSet”);  overload edilmiş

DataSet nesnesinin içini doldurnayı .Net data providerları bir arabirim işlevi görerek yapar. DataSet nesnesi veriyi tutar, veri üzerinde update(güncelleme), delete(silme), add(ekleme) işlevlerinin yapılmasına da izin verir. Ancak bu DataSet nesnesinin o sırada veritabanı ile bağlantısı olmadığı için Update metodu çağrıldığı zaman veri üzerinde yapılan değişiklikler DataAdapter nesnesi aracılığı ile veritabanına gönderilirler.

Kayıt Ekleme

Yeni bir DataRow nesnesi yaratarak DataSet’e yeni kayıt eklemesi yapılır. Bu ise DataTable nesnesinin NewRow metodu kullanılarak gerçekleştirilir. Bu metod ile boş bir row(sıra) yaratılır. Kayıt ekleme için basit bir örnek kod aşağıda belirtilmiştir.

Dim row as DataRow = dataSet.Tables[0].NewRow()

row[“soyad”] = “soyad”

row[“ad”] = “ad”

dataSet.Tables[0].Rows.Add(row)

Değişiklikleri Kabul Etme

DataSet üzerinde herhangi bir veri üzerinde değişklik yapıldığı zaman veride değişiklik yapıldığına dair işaretlenir. Eğer veri üzerinde yapılan değişkliğin doğruluğu onaylanırsa veri üzerinde yapılan değişiklikler kabul edilmek üzere DataSet nesnesinin AcceptChanges() metodu çağrılır. Ayrıca tüm DataSet’ler üzerinde yapılan değişiklikleri kabul etmek istemiyorsanız DataRow yada DataTable’ın AcceptChanges() metodunu kullanabilirsiniz. Bu sayede veriler üzerinde tam bir yönetim söz konusu olabilir.4

Yalnız DataSet üzerinde yaptığınız değişiklikler veritabanını değiştirmez.(Eğer DataSet’inizin veritabanı bağlantısı kesilmişse ki performans açısından bağlantının kesilmiş olması daha yararlıdır.). Bu yüzden DataAdapter nesnesinin Update() metodunu kullanarak veritabanına sadece değişiklik yapılan kısımların gönderilmesi sağlanır. (Dikkat tüm veriler gitmiyor sadece değişiklikler gidiyor.)

Veri Bileşenlerini Bağlama

Yeni .Net bileşenleri(component) sayesinde verileri bağlamak hem Windows Formlarında hem de Web Formlarında oldukça basitleşti. DataSetleri Windows veya Web Formlarına bağlayarak DataSetin içindeki bütün verileri görmek mümkün.

Bu bileşenlerden bir tanesi olan DataGrid’ler çoklu DataTable nesnesini içlerinde barındırırlar. Bu DataTable’lerin her biri de çoklu data row nesneleri içerirler. DataGrid’in DataSource özelliğine sadece DataSet nesnesini bağlamamız DataSet’lere erişmemiz için yeterli olur. Tabii bir de DataSet içerisinden hangi DataTable nesnesinin gösterileceğini belirtmemiz gerekir. Aksi halde DataGrid üzerinde DataSet’in sahip olduğu bütün DataRow’lar gösterilir. Bu işlemi ise DataGrid’in DataMember özelliğini kullanarak yapabiliriz

…alıntıdır…

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s