mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ile Veritabanından Rasgele Kayıt Çekme
Yaptığımız sitelerde veya gezindiğimiz sitelerde bazı bölümlerin rasgele olarak doldurulduğunu görüyoruz. Ben de veritabanından rasgele bir kayıt nasıl çekebiliriz, onlardan birini göstereceğim.
Öncelikle kayıt alacağımız veritabanını oluşturalım. Ben günlük sözler gibi bir uygulama yapıp rasgele günlük söz getirme örneği üzerinde anlatacağım. Bunun için veritabanımızı gunluk sozleri tutan bir sütun hazırlayıp oluşturuyoruz.

Kodlarım ise şöyle:

public partial class _Default : System.Web.UI.Page{
    OleDbConnection baglanti;
    Random at;
    protected void Page_Load(object sender, EventArgs e)
    {
        baglanti = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/App_Data/random.mdb"));
        random_at();
    }
    public void random_at()
    {
        at = new Random();
        OleDbDataAdapter adaptor = new OleDbDataAdapter("select * from gunluk_sozler", baglanti);
        DataTable tablom = new DataTable();
        adaptor.Fill(tablom);
        int gelen = at.Next(0, tablom.Rows.Count);
        Label1.Text = tablom.Rows[gelen]["gunluk_soz"].ToString();
    }}


Böylece veritabanından rasgele çektiğimiz kayıtı sayfamızda gösterebiliyoruz. Ben sitemin anasayfasında böyle bir uygulamayı kullanıyorum. Ayrıca sitemde banner olarak hazırlamış olduğum resimleri de yine bu yöntemle rasgele olarak her sayfada yüklenmesini sağlıyorum. Bunun dışında sitemizde kayıtlı olan haber, makale gibi bilgilerden rasgele kayıtlar çekip kullanıcılara sunabiliriz.

Örnek projeye buradan ulaşabilirsiniz. Projede rasgele resim atma örneğini de kısa biçimde gösterdim.
İyi Çalışmalar!
Mehmet Duran 02 Temmuz Çarşamba 2008 18 26711 3,0
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Asp.net 2.0 - Selçuk Özdemir Asp.net ile Mysql`e Bağlanma Asp.net ile Arşiv Bölümü Hazırlama - Örnek Uygulama Asp.net ve Ms Sql ile Dataları Sayfalama İşlemi Asp.net'te Veritabanına Kayıt Ekleme Ardından Primary Alan Değerini Alma
Yorumlar
Yorum Yaz
RSS Yorum Takibi
falanca 01 Kasım Cumartesi 2008 13:45 #1
kardeş güzel yazmışsın ama keşke birde rastgele deilde normal veri çekmeyi yazsaydın
can 18 Kasım Salı 2008 03:13 #2
bi mutlu olun ya :)))
Çok mükemmel bir site 21 Ocak Çarşamba 2009 23:35 #3
harika gerçekten güzel
farklı bi method 30 Ocak Cuma 2009 17:58 #4
bunu şu şekildede yapabilirsiniz. Sql olarak SELECT TOP(5) * FROM Tablo ORDER BY NewID() TOP kısmından kaç kayıt getireleceğini ayarlayabilirsiniz tabi bu örnek daha garanti sql methoduyla aynı kayıtlar gelebilir.
Mehmet Duran 30 Ocak Cuma 2009 18:02 #5
Merhaba. Verdiğiniz örnek sadece destekleyen veritabanları için geçerli. (Sql server, mysql gibi. Ayrıca her veritabanı için kullanımı farklı.) Bu örnek access gibi bir veritabanından rasgele kayıt çekmek için verdiğim bir örnekti.
Kaan 03 Temmuz Cuma 2009 18:56 #6
Selamlar Hazırladığım sistemde kullanıcı connectionStrings`te yapacağı belirtmeyle Microsoft SQL Server,OleDb,Odbc,Oracle,Firebird,PostgreSQL ve MySQL arasında geçiş yapabiliyor.Ama her veritabanının farklı özelliği var. mesela Excel tablo isimlerinden sonra $ kullanıyoruz. Veritabanları stored procedure nedir bilirken excel bilmiyor. Birinde NewID() bir mana ifade ederken diğerinde etmiyor. Nasıl bir şey yazmak gerekiyor ki sistem hangi veritabanı olursa olsun ne yapmak istediğimizi anlasın.
Mehmet Duran 03 Temmuz Cuma 2009 22:52 #7
Bunun için tüm durumları kontrol ederek sonuç üreten bir sınıf veya kütüphane hazırlayabilirsin. Ancak söz konusu durumlar her veritabanı durumu için tek tek kontrol edilmeli. Bunun dışında yapılacak pek birşey olacağını sanmıyorum.
Kaan 03 Temmuz Cuma 2009 23:20 #8
Teşekkür ederim. Peki olayın performans yönü ne olur? Her kod yığını milisaniyelerde de olsa sistemi yavaşlatır. Ben her if, swich, regex yazışında eli titreyen bir insanım :)
Mehmet Duran 03 Temmuz Cuma 2009 23:32 #9
Burada yapacağımız karşılaştırmalar hep string türü ifadelerin karşılaştırılması olacaktır ve bunun da çok büyük performans kaybına neden olacağını düşünmüyorum. Özellikle sunucu özelliklerinin gelişmesi bu karşılaştırmaları yapmada bir sorun teşkil etmemekte diye düşünüyorum.
Nedim 04 Ağustos Salı 2009 16:10 #10
Merhaba; Güzel kısa ve öz olmuş, ellerinize sağlık. Burada bir sorum olucak: vt'den rasgele 1 kayıt yerine birden fazla kayıt çekmek istiyoruz. bunu, yukarıdaki kodlarınızı aşağıdaki şekilde düzenleyerek yapıyorum: adaptor.Fill(tablom);
for (byte say = 0; say <= 3; say++)
{
int gelen = at.Next(0, tablom.Rows.Count);
Label1.Text = tablom.Rows[gelen]["gunluk_soz"].ToString();
}
kodlar çalışıyor fakat, bazen üçüi bazen de 2 si birbirinin aynısı oluyor.3 ününde farklı olması için?
Nedim 04 Ağustos Salı 2009 16:11 #11
yer kalmadığı için buradan devam ediyorum. tşk. ederim iyi çalışmalar.
Mehmet Duran 05 Ağustos Çarşamba 2009 11:26 #12
Burada yazmış olduğum kodlar tek kayıt için kullanılabilir ancak çoklu rastgele kayıt için söylemiş olduğun sıkıntı olabilir. Bunun için veritabanının kendi içinde olan rasgtele kayıt getiren fonksiyonları kullanabilirsin. Bu şekilde çok sayıda rasgele kayıt alabilirsin. (mysql'de rand() gibi.)
Ali 30 Kasım Pazartesi 2009 00:55 #13
Burada veritabanından rastgele veri çekilmiyor ki, tablo komple çekiliyor ve bir sanal tablayo doldurulup O sanal tablonun rastgele satırından veriyi alıyorsunuz.. Sayfanın görüntülenme potansiyelini düşünürsek bu algoritma her seferinde sadece tek bir satır için çalışacak. Bence veritabanından sadece rastgele 1 adet kayıt getirin.
Mehmet Duran 30 Kasım Pazartesi 2009 00:59 #14
Söylediklerinde haklısın tamamen. Ancak bu acemilik döneminde yazılmış bir kod. Tabiki tek bir rastgele kayıt için bunlara gerek yok. Direk olarak veritabanının kendi fonksiyonları ile işlem yapmak daha mantıklı.
Miraç Baran Satıç 03 Aralık Perşembe 2009 23:02 #15
Aslında Mysql'in refahı için :) random_at da "select * from gunluk_sozler" değilde "select Count(*) from gunluk_sozler" kullanmak daha mantıklı bence..
Mehmet Duran 03 Aralık Perşembe 2009 23:43 #16
Bir önceki yorumumda belirttiğim gibi böyle bir kullanım pek kullanışlı değil. Toy zamanımda yazmış olduğum bir kod bloğu. Ancak senin mantığın da count almak pek işe yaramaz gibi.
Emre 01 Kasım Pazartesi 2010 15:48 #17
Toy zamanımda yazmış olduğum kod bloğu demişsiniz. Şu andaki uzman zamanlarınızda yazdığınız kod bloğunu da paylaşmanızı bekleriz.mdb veritabanının kullanılması gerektiği yerlerde asp.net ile rastgele veri çekmek gerçekten bir sorun...
Mehmet Duran 02 Kasım Salı 2010 15:56 #18
@Emre, şu anda ve uzun süredir Access veritabanı kullanmıyorum. Zamanında kullanmışım ve kod bloğunu paylaşmışım. Access'te random olarak kayıt getiren fonksiyonlar mevcut değil. Bunun için diğer veritabanlarını kullanmanı tavsiye ederim. (örnek:mysql) İlla access ile yapacaksan kayıtların hepsini bir dizi şeklinde hafızaya alıp kayıt sayısı sınırında bir sayı üretip dizinin o sayılı indeksinde bulunan elemanı rasgele olarak seçebilirsin. Ancak burada boş yere birçok kaydı hafızaya almış olacaksın.
İ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.
Büyük işler gibi, büyük düşüncelerinde davula ihtiyaçları yoktur.
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