Uzun bir aradan sonra tekrar merhaba.. Ramazan gece mesaileri vs. derken birde üzerine üşengeçliğim eklenince baya uzun bir ara oldu. Neyse kısa kesip gelelim konuya; veri tabanına tekrar tekrar gidip sorgulama yapmak yerine tek seferde çektip DataTable üzerine aldığımız data üzerinden filtreleme yapmak için Select() fonksiyonunu birçoğumuz kullanmışızdır. Diğer veri türlerinde bir problem yaşamadan select işlemini rahatlıkla gerçekleştirebilmemize rağmen DateTime tipindeki alanlar üzerinden sorgulamak pek basit olmuyor.

Veri tabanının dil ayarları, serverın dil ayarları ve veri çektiğiniz componentin format ayarları olsun birçok faktör araya girerek işi zorlaştırıyor. Öncelikle eğer çektiğimiz veri sadece Date bilgisi içeriyor ise Saniye bilgisi içeren bir DateTime değişkeni elde etmek için “ToLongFormat” isminde bir fonksiyon yazıyorum :


static DateTime ToLongFormat(DateTime dateTime)
{
   return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Kind);
}

Şimdi örneğin sitemizin üyeleriyle ilgili istatistikleri yayınladığımız bir sayfa var ve tüm üyelerimizi veri tabanından çekiyoruz. Çeşitli bilgiler içeren bölümleri hazırladıktan sonra sıra doğum günü seçilen tarih olan üyeleri listeleyen bir bölüm hazırlamaya geldi. Bu durumda aşağıdaki gibi bir kod yazarak select işlemini gerçekleştiriyoruz :

dtUyeler.Select("DOGUM_TARIHI >= '#" + ToLongFormat(dpDTarihi.SelectedDate.Value).ToString(DateTimeFormatInfo.InvariantInfo) + "#' AND DOGUM_TARIHI < '#" + ToLongFormat(dpDTarihi.SelectedDate.Value).AddSeconds(1).ToString(DateTimeFormatInfo.InvariantInfo) + "#'");

Kodu açıklayacak olursak tarih verisini hazırladığımız fonksiyonla uzun tarih formatına çevirdikten sonra ToString fonksiyonu ile string bir ifadeye çevirirken formatını InvariantInfo ( Invariant : Sabit nicelik,değiştirilemez.) olarak seçiyoruz. Burada direkt eşittir dediğimiz zaman sonuç elde edemiyoruz bu yüzden yapmamız gereken şey istediğimiz tarih için >= - Büyük Eşit – ifadesini kullanıp sorguya birde istediğimiz tarihe bir saniye ekleyerek, elde ettiğimiz DateTime verisinden küçük olanları getir durumunu eklemek. Tarih değerlerinde case yazarken tırnak işaretiyle birlikte # diyez kullanmamız gerekiyor. Böylelikle doğum tarihi istediğimiz tarihe denk gelen üyeleri listeletmiş oluruz. Bir başka bilgi paylaşımında görüşmek üzere iyi çalışmalar ..
Etiketler : C#
Kategoriler : ASP .NET C#
Yorumlar : 1 Yorum Yorum Yaz

Yorumlar

Selçuk ERMAYA 10/21/2009 1:30 PM
Eline sağlık dostum ;) Yararlı bir makale olmuş ;)

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Takip
Arama
  Ara
Tag Bulutu