mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ve Ms Sql ile Dataları Sayfalama İşlemi
Bu yazımda bir önceki yazımda anlattığım mysql ile dataları sayfalama işlemini Ms Sql ile nasıl yapabileceğimizi göstereceğim. Mysql ile sayfalama işlemi için Mysql'in komutlarından olan limit komutu ile sayfalama yapıyoruz. Ms Sql'de ise sayfalama yapmak için satır sayılarını veren fonksiyonu kullanacağız. Bu fonksiyon ile tablomuzda sanki satır numaralarını tutan bir alan oluşturuyormuşuz gibi bir sorgu kullanarak bu satır numaraları ile sayfalama işlemini yapacağız.

İnternette bu konuyu araştırdım ve çoğu programcının Ms Sql ile sayfalama işlemlerinde bu yöntemi kullandığını gördüm. Bu yüzden Mysql ile sayfalamanın üzerine bu yazıyı sizlerle paylaşma ihtiyacı duydum.

Sayfalama uygulaması mysql için ve ms sql için aynı. Hiç bir fark yok. Fark sadece sorgumuzda. Bu yazımda da kod olarak sadece sorgu kısmını göstereceğim. Geri kalan bölümler hem mysql için hem ms sql için aynı. Bu yüzden sadece farklı bölüm olan sorgu kısmını paylaşacağım. Geri kalan kodlamalar için bir önceki yazıma bakabilirsiniz. Oradaki kodları ms sql ile kullanacaksak sadece data kontrollerini değiştirmeliyiz (MySqlDataAdapter --> SqlDataAdaptor gibi). Farklı olan datatable dönderen ve sorgumuzu çalıştıran metot. Ms Sql için bu metot aşağıdaki şekilde olmalı.

  public DataTable datalarim(int baslangic_satiri, int bitis_satiri)
  {
    string sorgu = "SELECT * FROM (select row_number() over (order by alan_adi) as row, * from tablo_adi) as results where results.row > " + baslangic_satiri + " and results.row <= " + bitis_satiri;
    SqlDataAdapter adaptor = new SqlDataAdapter(sorgu, bg);
    DataTable tablo = new DataTable();
    adaptor.Fill(tablo);
    return tablo;
  }

Görüldüğü gibi ms sql de sayfalama uygulamaları için sorgumuzu bu şekilde yazabiliriz. Sayfalama uygulamasının geri kalan parçaları ise bir önceki yazımda olduğu gibidir. Hiç bir fark yok. Oradaki mysql kontrollerini ms sql kontollerine çevirmemiz yeterli olacaktır.

Bundan sonra hem Mysql ile hem de Ms Sql çalışmalarımızda sayfalama işlemini yapabiliriz.

İyi Çalışmalar!
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar MySql'de limit ve rand Kullanımı Facebook Profil Rozeti Javascript ile Linkleri Renklendirme Jquery ile Yatay Accordion Uygulaması Javascript ile Belli Bir Süre Bekletme ve Yönlendirme İşlemi
Yorumlar
Yorum Yaz
RSS Yorum Takibi
EmrE TURAN 21 Aralık Pazar 2008 21:26 #1
row_number() komutu ms sql 2000 de yok sanırım. hosttaki veritabanımda hata veriyor bu satır ?
Mehmet Duran 21 Aralık Pazar 2008 22:31 #2
row_number() komutu 2005 için olabilir ama tam olarak bilmiyorum. Hemen araştırma yaparak bu sorunu çözmeyi umut ediyorum. Uyarı için teşekkür ederim.
Mehmet Duran 21 Aralık Pazar 2008 22:41 #3
Maalesef belirtmeliyim ki bu komut sql server 2005 ile gelmiş bir yenilik imiş. Oracle ile çok kullanılan ve çok karmaşık işlemleri kolaylaştıran bu yöntem ms sql 2005 ile desteklenmeye başlanmış. Maalesef sql 2000 desteklemiyor. Ancak bu konuda araştırmalarım sürecek. Sonuç alırsam buradan paylaşırım.
Mehmet Kabaklı 25 Aralık Perşembe 2008 17:18 #4
Merhaba. evet sayfalama yaptım. ama 2 sayfaya gectigimde veriler gorunmuyor bomboş sayfa. sadece ilk sayfa da veriler var. nerde hata yaptım anlamıyorum
Mehmet Duran 25 Aralık Perşembe 2008 21:23 #5
Bu kodlarda bir hata yok. Çalışan kodlar. Eğer kodlarını gönderebilirsen yardımcı olabilirim.
Mehmet Duran 28 Aralık Pazar 2008 21:34 #6
Burada yazdığımız metodu çağırırken mysql`den farklı olarak parametre değerimiz şöyle olmalı:
datalarim((sayfa_numarasi-1)*sayfalama_adeti,sayfa_numarasi*sayfalama_adeti);
İhsan Bulut 03 Ocak Cumartesi 2009 22:57 #7
Gercekten güzel olmuş. yanlnız şunu yapamıyoruz. ornegin listeledigimiz datalardan 2. sayfaya geciyoruz 2 tıkladıgımda sayfanın 2. sayfa oldugunu vurgulamak icin sayfa numarasını baska renkte veya formatta gosterme sansımız yokmu? ornegin 7 makale 2. sayfada diyelim. 2. sayfayı tıklıyorum. ve suan 2. sayfada oldugumu gormek icin rakamı renkli gostermek istiyorum
Mehmet Duran 03 Ocak Cumartesi 2009 23:07 #8
Merhaba. Dediğini yapmak için kodlara çok ufak bir ekleme yapmak yeterli. Aslında bunları vermiyorum. Uğraşanlar kendisi bulsun diye. :) Ancak nasıl yapılacağını söyleyeyim. Bunu yapmak için sayfa numaralarını yazdırdığımız döngüde url`den aldığımız sayfa numarasını kontrol etmeliyiz. Döngüde bu değer ile eşleşen değer aktif sayfadır. Döngü içinde kontrol ederek bu değere istediğimiz şekli verebiliriz.
İhsan Bulut 04 Ocak Pazar 2009 00:44 #9
sayfa numaralarını yazdırdıgımız dongude urldeki degere bir class ile renk ataması yaptım. ama sonuc bütün degerler aynı renge büründü :) döngü içinde yapılması bütün değerlere aynı rengi atıyor sanırım. döngünün dışındamı yapılması gerek acaba.
ihsan bulut 04 Ocak Pazar 2009 01:03 #10
az kaldı çözmek üzereyim. sen hep böyle yap kardeşim. ipucu ver biz uğraşalım :)
Ali Özer 13 Ocak Salı 2009 01:26 #11
Merhaba,bu konu ile biraz alakasız olucak ama nette aradım asp.net c# sql de bulamadım.Şansımı böyle denemek istedim.Database de bulduğum kaydın bir değerini textbox a nasıl yazdırabilirim acaba?
Mehmet Duran 13 Ocak Salı 2009 09:25 #12
Merhaba. Arama yapıp elde ettiğin verileri okuduktan sonra istediğini herhangi bir kontrole yükleyebilirsin. Mesela command neenesi ile okuyorsan datareader kullanmalısın. textbox.text = datareader["sutun_adi"].ToString(); gibi. Böyle bir kodlama işini görür.
Ali Özer 13 Ocak Salı 2009 13:41 #13
Dediğin gibi sqlcommend ile okumaya çalıştım.Şöyle; SqlConnection con = new SqlConnection(conn); SqlCommand cmd = new SqlCommand(sql,con); SqlDataReader reader = cmd.ExecuteReader(); Şöyle bi hata veriyor neden olabilir? ExecuteReader açık ve kullanılabilen bir bağlantı gerektirir. Bağlantının geçerli durumu: kapalı.
Mehmet Duran 13 Ocak Salı 2009 16:41 #14
Merhaba. Hatanın nedeni bağlantıyı açmamanızdan. Bu işlemlerin yapısını incelersen daha iyi olur. İnternette örnekler bulabilirsin. Önce bağlantıyı açman daha sonra yapacaklarını yapıp bağlantıyı kapatman gerekiyor.
Recep 29 Ocak Perşembe 2009 15:37 #15
Mehmet , paylaşım güzel. Benim takıldığım bir nokta var , örnek olarak onaylı üyeleri listeletmek istiyorum. kaç adet onaylı kayıt olduğunu alıyorum örnek olarak paylaştığın string sorgu = "..."; nun içinde row olarak aldığı için onaylı olmayan üyeleride sayıyor ancak veri olarak göstermiyor. Yani baslangic row 0 bitis 10 diyelim arada 2 tane onaysız varsa her ilk sayfada 8 veri gösteriyor . string sorgu içinde where komutunu nasıl kullanabiliriz ?
Mehmet Duran 29 Ocak Perşembe 2009 15:42 #16
Dediğin sorunu çözmek için sorguda yer alan iki koşulun ardından kendi koşulunu koymalısın. İstediğin üçüncü koşulu sorguda yer alan where komutu ardından and ile belirtirsen sorunun çözüleceğini düşünüyorum.
Recep 29 Ocak Perşembe 2009 17:27 #17
and where uye_onay=1 dediğim zaman onaylıları getiriyo evet , ancak şöyle bir sorun var veri row 1 onaylı veri row 2 onaylı veri row 3 onaylı veri row 4 onaysız veri row 5 onaylı veri row 6 onaylı diyelim ki sayfada 6 veri getirmek istiyorum row olarak çağırdımız içinmidir nedir bilmiyorum onaysızı göstermiyor ama 6 adetin içinde sayıyor yani 7. veriyi ilk sayfaya düşürmüyor.
Mehmet Duran 29 Ocak Perşembe 2009 18:59 #18
Sorunu anladım. Bir örnek ile çözmeye çalışacağım. Sonucu buradan yazarım.
Mehmet Duran 29 Ocak Perşembe 2009 19:16 #19
Merhaba. Sorunun kaynağını buldum. Daha önceki cevabımda dediğim where koşulu ile atadığımız satır numaralarını kontrol ediyoruz. Veritabanımızdaki verilerle bir ilgisi yok. Bizim koşulu koymamız gereken yer ".. from tablo_adi where koşul" şeklinde olmalı. İyi Çalışmalar!
Recep 29 Ocak Perşembe 2009 22:14 #20
Evet , dediğin gibiymiş. Bir yere odaklanınca çözümü görmek imkansızlaşıyor resmen. Teşekkürler.
İhsah Bulut 29 Ocak Perşembe 2009 23:25 #21
üstad yukardaki sorgu stringindeki sql cümleciğini access veritabanına gore nasıl yazabiliriz? accesste hata veriyor. bu cümlenin tam olarak accesste calismasi icin karsiligi nedir?
Mehmet Duran 29 Ocak Perşembe 2009 23:30 #22
Bu sorguda sayfalama yapmak için verilere sanal bir id atayıp onun üzerinden sayfalamayı gerçekleştiriyoruz. Bunu da sağlayan Sql veritabanı. Bildiğim kadarıyla access bunu desteklemiyor. Access ile sayfalama yapmak için verilerin hepsini çekip, datatable veya dataset`e aldıktan sonra bu nesneler üzerinden sayfalama yapmak gerekiyor.
huseyin 05 Ağustos Çarşamba 2009 00:19 #23
Merhaba.Buradaki over ne anlama geliyor?Yani order by üzerindeki etkisi ne??Ben parametreleri dogru girmeme ragmen -- datalarim((sayfa_numarasi - 1) * sayfalama_adeti, sayfa_numarasi*sayfalama_adeti)-- Sayfada sadece linkler geliyor ve bir türlü sorunu bulamadım.VStudio 2008 ile calısıyorum ve bu studionun altındaki sql i kullanmaktayım??(burada row_number) gecer herhalde??
Mehmet Duran 05 Ağustos Çarşamba 2009 11:34 #24
Sorgudaki over sutuna göre sıralama yapılmasını sağlıyor. Bu şekilde istediğimiz sutuna göre verileri sıralayıp bu verileri row_number ile numaranlandırıp bu numaralara göre sayfalama yapıyoruz. Row_number fonksiyonu daha önceki yorumlarda da dediğim gibi sql 2005 ile geldi. Kullandığın Express sürümünde de olması gerekir (2005 veya üstü ise).
huseyin 06 Ağustos Perşembe 2009 00:32 #25
cevabın için tesekkurler.Ben bu sırada Repeater yerine GridView kullanınca çalıştı.Hiç bir kodda da değişiklik yapmadım.Sadece Repeater yerine Gridview ekledim.Bunun nedeni ne olabilir?Bu sırada basarılarının da devamını dilerim.
Mehmet Duran 06 Ağustos Perşembe 2009 23:28 #26
Temennin için teşekkür ederim. Umarım hepimiz başarılı oluruz. Soruna gelince Repeater kullanınca verileri yazdırmak için Eval veya Bind fonksiyonlarını kullanarak item template bölümünü oluşturmalıyız. Eğer bunu yapmazsak verileri görüntüleyemeyiz. Gridview ise bunu otomatik olarak yapıyor. Ancak gridview'da autogeneratecolumns özelliğini false yaptığın takdirde aynen repeater gibi kullanmak gerekir.
Bilal 09 Ağustos Pazar 2009 14:04 #27
Bu örnek uygulama tek tablo ile gayet güzel çalışıyor amam ben iki tabloyu birleştirip öyle sayfalama yapmak istiyorum şöyle bir sorgu oluşturdum ama hata veriyor "SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY tblhaberler.hID) AS SatirID, * FROM tblhkategori INNER JOIN tblhaberler ON tblhkategori.kID = tblhaberler.kID) AS Sonuc WHERE Sonuc.SatirID BETWEEN 0 AND 10 " nerede hata yapıyorum acaba.
Mehmet Duran 10 Ağustos Pazartesi 2009 20:28 #28
Merhaba. Cevabım geç oluyor. Çünkü örneği denemek ve öyle yazmak istedim ancak fırsat bulamadım. Muhtemelen sql syntax hatası vardır. Bununla ilgili buradan örnek sorguları görebilirsin. Umarım yardımcı olur. Fırsat bulabilseydim kendim deneyecektim ama fırsatım olmadı.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Gençken bilgi ağacını dikmesek, yaşlandığımız zaman gölgesine sığınacak bir yerimiz olmayacaktır.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009