Anasayfa / Yazılım / ASP.NET / Data Sets ve Data Table ile Çalışmak

Data Sets ve Data Table ile Çalışmak

Şu ana kadar olan veritabanından veri okuma yazılarımda ve uygulamalarımda yeri geldi SqlDataReader kullandım yeri geldi SqlDataSource kullandım. Bu şekilde çeşitli yöntemlerle ve çeşitli özellikleri ile veritabanından veri çekip listeledik, güncelleme yapabildik, veri silebildik. Şimdi birazda bağlantısız model yani disconnected data nedir ne değildir, biraz teorik bilgi ile giriş yapalım.

Disconnected Data şudur, veri kaynağından bağımsız olarak verilerin alındığı ve tutulduğu yerdir ve Disconnected data bize masaüstü uygulamalarında veya web uygulamalarında çeşitli olanaklar sağlar. Normalde ne zaman veritabanından bir veriye erişmek istesek bir data connection nesnesi ve bir data command nesnesi oluştururuz. Bu iki objede bir data reader objesi oluşturmak için birlikte kullanılırlar. Ve veritabanından çekmiş olduğumuz dataları gösterebilmek içinde bir data control nesnesi kullanılırız. Bu işlemi aşağıdaki gibi resmedebiliriz.

Resimden de anlaşılacağı üzere kullanıcı uygulamamızı kullandığında veritabanından veri okuma esnasında sürekli olarak bağlantısı açık kalıyor. Bir çok kişi aynı veri kaynağına bağlandığında dolayısı ile uygulamamızın performansı düşebiliyor. Buna ek olarak DataReader ile okunan veriler sürekli olarak forward only yani ileri yönlüdür, dolayısı ile geri dönemezsiniz. Sıralama, filtreleme, sayfalama yapmakda çok performanslı olmaz. Küçük projeler hariç tabi. Büyük projelerde bu hantallığı çok daha rahat bir şekilde hissedebilirsiniz. Ayrıca DataReader ile veritabanına bir kez bağlandığınızda aynı DataReader nesnesini kullanarak aynı veritabanına birden fazla bağlantı kuramazsınız yani multiple request dediğimiz olay olmaz.

Peki o halde DataSet’e gelelim. Data Sets daha esnek bir yapıya sahiptir. Data seti tanımlamak gerekirse şunu diyebiliriz aslında, üzerinde çalışabileceğiniz, çeşitli denemeler yapabileceğiniz, istediğiniz bir kodu çalıştırmak için kullanacağınız bir sanal veritabanı yapısı gibi bir şey. Data sets ile uygulama yaparken daha net anlayacağız bu durumu 🙂

Data setler tıpkı önceki uygulamarızda olduğu gibi tablolar, satırlar, sütunlar, sorgular içerirler. Bir Data set veritabanımızdan çektiğimiz verilerin bellekte oluşturacağı bir kopyadır aslında. Bellekte tutulduğu içinde biz bağlantımızı veritabanından kessek dahi istediğimiz işlemleri yapmaya devam edebiliriz. Yani veri tabanımıza verileri çekmek için bağlanabilir, sonra bağlantımızı kesip işlemizi yapabilir sonra güncellemek için tekrar bağlanabiliriz. Yani işlem yaparken bağlı kalma gibi bir derdimiz olmaz. Bu durumu resmedelim.

Resimden de anlaşılacağı üzere veri kaynağımızdan veri alınır ve bir data set yani bir veri kümesi oluşturulur. Uygulamamız üzerinde işlem yapılırken bu oluşturulan Data Set kullanılır.

Data Set kullanmanın en büyük avantajı ise aynı anda birden fazla kullanıcın aynı Data Set için talepte bulunabilmesidir. Performansı dolayısı ile daha fazladır.

Tabi bu kadar avantajın yanında dezavantajları da vardır. Data Set kullanımı daha fazla bellek alanı gerektirmektedir. Çünkü alınan verileri bellekte tutar. Çünkü Data Reader nesnesi ile sadece belli bir Query sonucunda alınan veri bellek üzerinden tutulurken, Data Set ile bir veritabanının tamamı bellek üzerinde tutulabilir, dolayısı ihtiyaç duyacağı bellek daha fazladır.

Bu yüzden uygulamalarımızda veri tabanı üzerinde işlem yapacağımız zaman hangi modeli kullanabileceğimize iyi karar vermemiz gerekir. Bu karar önemlidir çünkü, yapacağımız işlemler sonucunda;

  • veri tabanının bulunduğu server üzerindeki performans,
  • kullanıcının makinesindeki performans
  • uygulamanın sahip olduğu mimari
  • etkilenir.

    Genel olarak sadece veritabanından veri listeleyeceksek Data Reader kullanmamız daha iyi olur. Ancak listelemenin yanı sıra güncelleme, veri ekleme, veri silme gibi işlemleri yapacaksak Data Set kullanmak daha iyi olur. Tabi yine de istisnai durumları da göz ardı etmemek gerekir.

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir