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 8 ay önce özgür tarafından güncellenmiştir.
-
YazarYazılar
-
3 Nisan 2012: 13:22 #11697Tolgaİ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.OgretmenGelelim 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.
7 Nisan 2012: 11:09 #11962özgürİzleyiciteşekkürler
-
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.