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 :)))
harika gerçekten güzel
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.
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.
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 :)
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.
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?
yer kalmadığı için buradan devam ediyorum. tşk. ederim iyi çalışmalar.
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.
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ı.
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..
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...
@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.