DataTable ve Session İle Hızlı ve Pratik Raporlama İşlemleri

Ana sayfa Forumlar PROGRAMLAMA ASP.NET DataTable ve Session İle Hızlı ve Pratik Raporlama İşlemleri

  • Bu konu 1 yanıt içerir, 2 izleyen vardır ve en son 12 yıl önce özgür tarafından güncellenmiştir.
2 yazı görüntüleniyor - 1 ile 2 arası (toplam 2)
  • Yazar
    Yazılar
  • #11697
    Tolga
    İzleyici

    4-5 tablo üzerinde çok detaylı raporlama işlemlerinin yürütüldüğü bir sayfaya sahipsinizi düşünelim.
    bu tablo üzerindeki veriler üzerinde en hızlı raporlama yöntemlerinden biri hiç kuşkusuz saklı Yordam(Stored Procedure) kullanmak ve
    bu saklı yordamın içerisinde de Sql tümcelerini uzun metin (lontext veya nvarchar(max)) gibi veri türlerine çevirerek bu sql tümcesinde
    kelime ekleyerek ve bu tümceyi çalıştırarak hızlı çözümler üretebiliriz. (Bkz. Execute Sql String)

    Her güzel şeyin bir de kötü yanı olduğu gibi bu gibi bir ifadeyi geliştirmek biraz zaman almakta ve kod yenilemelerindede sizi zorlayabilir.
    Ayrıca web tarafından gelen her talep için sql her ne kadar stored da kullansak belli bir vakit kaybını doğurmakta.

    Aslında yapmamız gereken 2 nokta var eğer çok yoğun bir sorgulama yapacaksanız veya tablolar arası ilişkilendirmeniz varsa bu sorguyu bir stored procedure
    altında yapmak verimi daha da artırır. Ancak Her sorguda buraya bağlanmayacağız.

    Örnek Saklı Yordamımız (Stored Procedure)

    Kod:
    Create Procure [dbo].[spRandevulariGetir]
    As
    Select tb.*,
    tvb.AdSoyad as VeliAdSoyad,
    tvb.Adres as VeliAdres, tvb.CepTel as VeliCepTel, tvb.EvTel as VeliEvTel,
    trd.Tarih,trd.Saat,trd.RandevuSebebi,tro.Okul,tro.OkulID,tro.Okul,tri.IlceID,tri.Ilce,tog.Ogretmen
    From
    TRandevular trd
    left Join TKimlikBilgileri tb On trd.RandevuAlanTc=tb.RandevuAlanTc
    inner Join TVeliOgrenci tvo On tvo.OgrenciID=tb.OgrenciID
    right Join TVeliBilgileri tvb On tvo.VeliID=tvb.VeliID
    left Join TRandevuOkullar tro On tro.OkulID=tb.OkulTuru
    inner join TRandevuIlceler tri on tri.IlceID=tro.IlceID
    left Join TRandevuOgretmenleri tog on tog.Ogretmen=trd.Ogretmen

    Gelelim kod kısmımıza

    Kod:
    private DataTable RandevulariListeyeAta()
    {
    string sql = “spRandevulariGetir”
    SqlDataAdapter adp = new SqlDataAdapter(sql, ayar.Baglanti);
    DataTable dt = new DataTable();
    adp.Fill(dt);
    Session[“DataTable”] = dt;
    return dt;
    }

    üstteki alt rutin tek bir seferliğe mahsus çalışacak ilgili stored procedure ile gelen veriyi bir session da tutacak gerektiğinde biz sadece sessionlı kullanarak
    verileri çekeceğiz.

    Süz butonumuz (btnSuz) Buradaki kontrolleri açıklama gereği duymadım.

    Kod:
    protected void btnSuz_Click(object sender, EventArgs e)
    {
    string kriter = “OgrenciID>-1”;
    DataTable dt = new DataTable();
    if (Session[“DataTable”] != null)
    dt = (DataTable)Session[“DataTable”];
    else
    dt = this.RandevulariListeyeAta();
    kriter = OgrenciAdSoyad.Text == “” ? kriter : kriter + ” And RandevuAlan='” + OgrenciAdSoyad.Text + “‘”;
    kriter = OgrenciTcKimlik.Text == “” ? kriter : kriter + ” And RandevuAlanTc='” + OgrenciAdSoyad.Text + “‘”;
    kriter = Ilce.SelectedValue == “” ? kriter : kriter + ” And IlceID=” + Ilce.SelectedValue;
    kriter = Okul.SelectedValue == “” ? kriter : kriter + ” And OkulID=” + Okul.SelectedValue;
    kriter = OgretmenAdSoyad.Text == “” ? kriter : kriter + ” And Ogretmen Like ‘%” + OgretmenAdSoyad.Text + “%'”;
    kriter = BaslangicTarih.Text == “” ? kriter : kriter +
    ” And Tarih in (#” + Convert.ToDateTime(BaslangicTarih.Text).ToString(“yyyy-MM-dd”)
    + “#, #” + Convert.ToDateTime(BitisTarih.Text).ToString(“yyyy-MM-dd”) + “#)”;
    kriter = Saat.SelectedValue == “” ? kriter : kriter + ” And Saat='” + Saat.SelectedValue + “‘”;
    DataView dv = new DataView(dt);
    dv.RowFilter = kriter;
    gvRandevular.DataSource = dv;
    gvRandevular.DataBind();
    }

    Kod:
    if (Session[“DataTable”] != null)
    dt = (DataTable)Session[“DataTable”];
    else
    dt = this.RandevulariListeyeAta();

    İşte bu kod asıl işi yapan kısım bunun sayesinde tekrar tekrar veri tabanına bağlanmıyoruz.

    Aşağıdaki kodu kullanarak bir adet dataview oluşturuyoruz ve RowFilter ile yukarıda hazırladığımız kriterler doğrultusunda sorgulamaya tutuyoruz. sonrasında
    gvRandevular adlı gridviewımıza bağlıyoruz.

    Kod:
    DataView dv = new DataView(dt);
    dv.RowFilter = kriter;
    gvRandevular.DataSource = dv;
    gvRandevular.DataBind();

    İşin Püf noktası Sql sorgunuzdan gelen verileri DataTable a aktarmak bunu da Session’a yollamak 1.den sonraki tüm sorgulamalarda veriyi Sessiondan çekmek.

    #11962
    özgür
    İzleyici

    teşekkürler

2 yazı görüntüleniyor - 1 ile 2 arası (toplam 2)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Bana Ders Anlat © 2008-2022