Son Haberler
Anasayfa / Yazılım / ASP.NET / DataSet Kullanımı

DataSet Kullanımı

DataSet hakkında bir önceki yazılarda teorik olarak bahsettim. Bu yazımda uygulama ağırlıklı olacak. Yeni bir boş web site projesi açıyoruz. Bir adet web form ekliyoruz. Mevcut olan web.config dosyasında da bağlantımızı sağlayacak olan connectionstringimizi tanımlıyoruz.







    
        
    
  
    
  

Daha sonra projemizde sağ tıklayıp Add New Item diyoruz. Buradan bir WEB form ekliyoruz. Web formumuzun design alanında ToolBoxdan bir GridView sürüklüyoruz. Öncelikle yapmak istediğimi söyleyeyim, GridView kontrolümü DataSet nesnemde tutacağım verilerle doldurmak istiyorum. Dolayısı ile öncelikle veritabanından DataSet nesneme verileri çekeceğim daha sonra Data binding işlemi ile bu dataset nesnemi GridView kontrolüme bağlayacağım.

Kullanacağım database yine Northwnd veri tabanı. Sizinde SQL serverinizde olmalı, indirmek için aşağıdaki yazıyı inceleyebilirsiniz.

http://www.ismailgursoy.com.tr/northwind-veri-tabani-yukleme/

Şimdi Grdiview kontrolümü ekledim ve adını değiştirdim, aşağıda web formumun kod alanındaki şu andaki mevcut kodlarımı da yayınlıyorum.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>





    DataSet Örnek


    

DataSet Örnek

Sayfamın design alanında iken boş bir noktada çift tıklıyorum ve code behind tarafında Page_load eventinin oluşmasını sağlıyorum. Daha sonra code behind tarafında şu kodları yazıyorum. Bu arada ilgili namespace’leri üstte ekliyorum. Bunu da aşağıdaki kod bloğunda görebilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Sayfam eğer ilk defa yüklenecek ise yani postback edilmemişse aşağıdaki metodu çalıştır.
        if (!IsPostBack)
        {
            veriBagla();
        }
    }
    //metodumu tanımlıyorum
    private void veriBagla()
    {
        //Bağlantımı nesnem.
        SqlConnection conn;
        //Verileri tutacağım dataset nesnemi tanımlıyorum.
        DataSet ds = new DataSet();
        //DataSet içindeki DataAdapter
        SqlDataAdapter adr;
        //Bağlantımı web config dosyamdan alıyorum
        string cs = ConfigurationManager.ConnectionStrings["Baglantim"].ConnectionString;
        conn = new SqlConnection(cs);
        //SqlDataAdapter için query
        adr = new SqlDataAdapter("SELECT CategoryID, CategoryName, Description FROM Categories",conn);
        //SqlDataAdapter dolduruluyor
        adr.Fill(ds,"Categories");
        //Veri bağlama işlemlerim
        GVKontrol.DataSource = ds;
        GVKontrol.DataBind();
    }
}

Şimdi detaya girip anlatmaya başlayalım. Öncelikle namespace’leri tekrar hatırlayalım.

System.Data.SqlClient namespace’i SqlDataAdapter, SqlConnection gibi classları barındırır. System.Data namespace’i DataSet, DataTable gibi classları barındırır. System.Configuration namespace’i SystemConfiguration classını barındırır. Dolayısı ile öncelikle bunları refere ettim. Daha sonra kodlarıma bir metot ekledim. VeriBagla metodumda öncelikle sayfam ilk defa yükleniyor ise yani daha önceden postback edilmemişse metodumu çalıştır diye bir şart koştum. Yani sayfam olası bir yenileme durumunda tekrar tekrar aynı verileri veri listesinin sonuna eklemesin.

Daha sonra VeriBagla metoduma gelelim. Şu ana kadar örnekte yaptığım işlemler aslında SqlCommand, SqlDataReader, SqlDataSource ile yapmış olduğum uygulamalardaki gibi oldukça benzer nitelikte. Fark sadece SqlDataAdapter ve DataSet kullanmış olmam.

Görüldüğü gibi SqlDataAdapter nesnem tıpkı bir SqlCommand nesnesi gibi oluşturuluyor. Yine önceki uygulamalarda olduğu gibi bir SqlConnection nesnesi oluşturdum. Ama tabi bu sefer SqlDataAdapter ile ilişkili, SqlDataAdapter’in fill metodu ile veritabanından çekilen verileri DataSet’e aldıktan sonra SqlDataAdapter’ime doldurdum. Kodlarda görmüş olduğunuz üzere Fill metodu iki parametre kabul ediyor. Birincisi oluşturduğum DataSet objesi örneğimde ds adında, ikinci parametre ise DataSet objem içinde tutulan tablomun adı, örneğimizde Categories.

Buna ek olarak SqlDataReader’daki yaklaşıma benzer olarak DataSet nesnemdeki verileri kullanıcıya göstermek için GridView kontrolü kullandım ve aynı mantıkla DataBind ile veri bağlama işlemimi gerçekleştirdim. Uygulamamı çalıştırdığımda aşağıdaki gibi bir görüntü alırım.

Şimdi şunu yapalım. DataSet için önceki yazılarımda aynı DataSet üzerinde birden fazla tablo olabilir demiştim. Şimdi bunu yapalım. Aynı DataSet üzerinde bu sefer Northwnd veritabanından Employees tablosundan veri çekelim ve göstermeyi deneyelim.

Kodlarımızı aşağıdaki gibi değiştiriyoruz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Sayfam eğer ilk defa yüklenecek ise yani postback edilmemişse aşağıdaki metodu çalıştır.
        if (!IsPostBack)
        {
            veriBagla();
        }
    }
    //metodumu tanımlıyorum
    private void veriBagla()
    {
        //Bağlantımı nesnem.
        SqlConnection conn;
        //Verileri tutacağım dataset nesnemi tanımlıyorum.
        DataSet ds = new DataSet();
        //DataSet içindeki DataAdapter
        SqlDataAdapter adr;
        //Bağlantımı web config dosyamdan alıyorum
        string cs = ConfigurationManager.ConnectionStrings["Baglantim"].ConnectionString;
        conn = new SqlConnection(cs);
        //SqlDataAdapter için query
        adr = new SqlDataAdapter("SELECT CategoryID, CategoryName, Description FROM Categories",conn);
        //SqlDataAdapter dolduruluyor
        adr.Fill(ds,"Categories");
        adr.SelectCommand = new SqlCommand("SELECT EmployeeID, LastName, FirstName, City FROM Employees", conn);
        adr.Fill(ds, "Employees");
        //Veri bağlama işlemlerim
        GVKontrol.DataSource = ds;
        GVKontrol.DataMember = "Employees";
        GVKontrol.DataBind();
    }
}

Böylelikle aşağıdaki gibi sonuç alırız.

Bu sefer SqlDataAdapter nesnemizin SelectCommand özelliğini kullandık. Böylece DataSet objemize yeni bir DataTable ekledim. GridView’imizin DataMember özelliği ile de bu tablomuzu DataSet’imize bağladık. Görüldüğü gibi DataSet üzerinde DataTable objelerimiz de tıpkı bir DataBase gibi satırlara ve sütunlara sahip. Tek bir farkı var, DataTable bizim belleğimizde oluşturuluyor.

Bir sonraki yazıda da sayfalama yapmaya değineceğim. Bu arada verilerimiz son derece çirkin bir şekilde listeleniyor biliyorum 🙂 Ama işimiz CSS , tasarım vs değil, işimiz şu an kod yazmak veri listelemek, güzelleştirmek size kalsın. 🙂

Aşağıdaki linkten uygulamayı indirebilirsiniz.

3 yorum

  1. Iyi günler buna benzer bir form application projem var.xml den istenilen belli bir kütüphaneyi çekerek formda göstermek istiyorum. Nasıl yapabilirim?

  2. Merhaba anlatımlarınız çok güzel teşekkürler paylaşımlarınız için. Benim şöyle bir durumum söz konusu, index sayfasında ürünleri sıraladığnızı düşünün buraya kadar sorun yok ama yapmak istediğim şey urun adında bir sayfa oluşturup id ile sadece o veriyi çekmek istediğimde hangi metodu kullanmam gerekli? Repeater Kullanımı isimli sayfanızdaki gibi mi çağırmalıyım verileri?

  3. datasetin tam olarak görevi nedir yani?

Bir cevap yazın

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