yazgelistir.com
  Ana Sayfa   Forumlar Hakkımızda
  
Loading... Yükleniyor. Lütfen bekleyin ...
 Kategoriler
ASP.NET
ADO.NET
Visual Basic .NET
Visual C# .NET
Visual Studio ve Araçlar
Windows Server System
Office System
.NET Framework
SQL Server
XML Web Servisleri
Yazılım Güvenliği
Yazılım Mühendisliği
Mobil Teknolojileri
Dynamics
Smart Client
Expression Studio
Silverlight
Kod Parçaları
Açık Kaynak Kodlu Uygulamalar
İş Zekası
Windows Mobile Embedded

    0
Çıkış Yap
Üyelik Bilgilerimi Güncelle
Seminerlerim
Favorilerim
Ajanım

 Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda

  İstatistikler
En son kayıt olan üye:
samson

Şuanki online üyeler ( 0 ) :
 

DorukNet 
     SQL Server Kategorisi  » Grid için Veritabanı Üzerinde Sayfalama(Paging)    

Grid için Veritabanı Üzerinde Sayfalama(Paging)

Print Versiyonu


 
Yazar: Mehmet Ali ECER

Tarih:17.01.2008

Puan:5 (Oy Kullanan:2)

Okuma Sayısı:820

  Makaleyi İşaretle


Makale Özeti
Herhangi bir veriyi veritabanı üzerinden çekip grid üzerinde göstermek ve grid üzerinde sayfalama yapmak yüksek sayıda satır içeren gridler için yazılımın performans kaybına uğramasına sebep olur. Bu tip bir gösterim veritabanından tüm verilerin çekilip network üzerinden grid üzerine gelir, grid göstereceği veriyi filtreleyerek ekrana getirir. Küçük satır sayısındaki veriler için bu performans kaybı hissedilmesede çok büyük datalarla çalışan programlarda (crm,erp,banka yazılımları) gridin her bind(data bağlama) işleminde (sayfa geçişlerinde, sayfa yüklenmesinde) bu performans kaybı hissedilecektir. Bu tip yapılarda çekilecek veriler için filtreleme işlemleri veritabanı üzerinde yapılırsa ve her bir bind işleminde gösterilmeyecek verinin veritabanı üzerinden alınmaması performans üzerinde çok olumlu etki edecektir. Bu tarz bir mimariyi bu makalede tasarlayacağız.


Makale

Grid için Veritabanı Üzerinde Sayfalama(Paging)

Herhangi bir veriyi veritabanı üzerinden çekip grid üzerinde göstermek ve grid üzerinde sayfalama yapmak yüksek sayıda satır içeren gridler için yazılımın performans kaybına uğramasına sebep olur. Bu tip bir gösterim veritabanından tüm verilerin çekilip network üzerinden grid üzerine gelir, grid göstereceği veriyi filtreleyerek ekrana getirir. Küçük satır sayısındaki veriler için bu performans kaybı hissedilmesede çok büyük datalarla çalışan programlarda (crm,erp,banka yazılımları) gridin her bind(data bağlama) işleminde (sayfa geçişlerinde, sayfa yüklenmesinde) bu performans kaybı hissedilecektir. Bu tip yapılarda çekilecek veriler için filtreleme işlemleri veritabanı üzerinde yapılırsa ve her bir bind işleminde gösterilmeyecek verinin veritabanı üzerinden alınmaması performans üzerinde çok olumlu etki edecektir. Bu tarz bir mimariyi bu makalede tasarlayacağız.

Veritabanı üzerinde dummy veriler için bir tablo oluşturup, daha sonra bu verileri çekebilmek için bir stored procedure oluşturalım.

CREATE TABLE [dbo].[yer] (

    [mekanlar] [nchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

    [id] [int] IDENTITY (1, 1) NOT NULL

    ) ON [PRIMARY]

END

CREATE PROCEDURE [dbo].[GET_YER]

    ( @PAGE_NO INT,

    @PAGE_COUNT INT)

    AS

        SELECT

            *

        FROM

        (

        SELECT

            COUNT(*) OVER() TOTAL,

            ROW_NUMBER() OVER(ORDER BY MEKANLAR)AS SAY,

            MEKANLAR

        FROM

            [yer]

    )ZZ

    WHERE

        SAY BETWEEN ((@PAGE_NO-1)*@PAGE_COUNT)+1 AND @PAGE_NO*@PAGE_COUNT

GO

Stored Prosedür iki tane parametre almaktadır. Bunlar @PAGE_NO ve @PAGE_COUNT değerleridir. Bu değerler gridin hangi sayfayı kullanıcılara göstereceği bilgisi(@PAGE_NO ) ve gridini herbir sayfasında toplam kaç tane kayıdın olduğu bilgisidir(PAGE_COUNT ). Bu iki değer sayesinde stored prosedür sayfa üzerinde gösterilecek olan veriyi filtreleme işlemi yapar. Prosedür içerisinde iç içe iki select işlemi vardır. Birinci select işleminde   COUNT(*) OVER() TOTAL ile select ile toplam çekilen satır sayısını,  ROW_NUMBER() OVER(ORDER BY MEKANLAR)AS SAY ile satır satır sıralı olarak her bir satırın numarasını çekeriz. Dış taraftaki select işlemi ile grid için gerekli olan veri aralığını     SAY BETWEEN ((@PAGE_NO-1)*@PAGE_COUNT)+1 AND @PAGE_NO*@PAGE_COUNT kısıtı ile çeker.

Prosedürümüzü nasıl çalıştığını daha dikkatli inceleyelim. Burada ilk değer sayfa numarası ikinci değer ise istenilen satır sayısıdır.

[GET_YER] 1,5

TOTAL SAY MEKANLAR
23 1 anittepe                 
23 2 ayazaga                  
23 3 ayazma                   
23 4 beylikdüzü               
23 5 bostanci                 

[GET_YER] 2,5

TOTAL SAY MEKANLAR
23 6 bostanci                 
23 7 cambridge                
23 8 divrigi                  
23 9 fethiye                  
23 10 gülsuyu                  

[GET_YER] 3,5

TOTAL SAY MEKANLAR
23 11 hindistan                
23 12 istinye                  
23 13