ASP.NET Ajax Calendar ve T-SQL ile Tarih-Saat Bilgisini Ayırma - Makale - Yazılım Dilleri
Asp.Net Ajax Calendar kullanımı ve SQL Server DateTime değişkeninden tarih ve saat bilgilerini ayrıştırma işlemini öğrenelim.
Bu konu için şöyle bir senaryo düşünelim. Uçak bileti rezervasyonu yapacağız ve girmemiz gereken bilgiler kalkış yeri, varış yeri ve tarih olmalı. 2 DropDownList olacak ve buradan kalkış ve varış yerini seçeceğiz. Bir tane de Calendar olacak ve buradan da uçuş tarihimizi seçeceğiz. Ancak olması gereken şu ki o tarihteki tüm uçuşların saati farketmeksizin listelenmesi gerekir ve önceki tarihler seçilemez.
Öncelikle DropDownList'leri, Ajax CalendarExtender (ve bağlayacağımız bir TextBox) ve bir tane de butonu Desing kısmında yerleştirip işe başlayalım:
DropDownList'leri de aşağıdaki Alanlar tablomuza bağlayalım:
Bir de Sefer tablosu oluşturalım ve tabiki Alanlar tablosunun AlanID'si ile ilişkili KalkisID'si ve VarisID'si olsun:
Bir de şöyle bir view oluşturursak işimiz kolaylaşır:
İpucu: Ajax CalendarExtender'da Geçmiş Tarih Seçimini Engelleme
alert("Tarihi geçmişten seçemezsiniz!");
Bu sayede bugünden önceki günler pasif olur ve seçilmeye çalışıldığında uyarı verir. CalendarExtender kontrolü özelliklerine de şunu ekleyince bu mekanizma çalışacaktır:
İpucu: Ajax CalendarExtender'da Tarih Formatını Gün/Ay/Yıl Olarak Ayarlama
Türkiye'de kullanılacak bir proje ise takvim formatı gün/ay/yıl şeklinde olmalıdır (
) yani İpucu 1'i de birleştirirsek CalendarExtender kontrolümüz şöyle olacak:
<asp:CalendarExtender ID="CalendarExTarih" runat="server"
Butonun Click olayına da Sayfa2'ye geçmek için:
Response.Redirect("Sayfa2.aspx?Nereden=" + ddlNereden.SelectedValue + "&Nereye=" +
ddlNereye.SelectedValue + "&Tarih=" + Convert.ToDateTime(txtTarih.Text).ToString("yyyy-MM-dd"));
yazalım ve dikkat ettiyseniz Ajax CalendarExtender kontrolünün bağlı olduğu txtTarih adlı TextBox'ın içinde görülecek seçili tarihi sorguya gönderebilmek için SQL Server'daki biçime geri döndürdük. Bu kod parçasında ddlNereden ve ddlNereye ifadeleri kalkış ve varış için kullanılan DropDownList'lerin adlarıdır.
Bu bilgiler browser yardımıyla Sayfa2'ye geçti ve bu bilgileri Sayfa2'de varolan ve sütunlarını yukarıdaki View'a bağladığımız bir GridView'a aktaracağız. Şimdi de sorguya yazılacak ifadede sıra. Sayfa2 yüklendiğinde yazacağımız sorgu çalışacak ve seçilen bilgilerle örtüşen seferler GridView'da gösterilecek.
İpucu: T-SQL ile Tarih ve Saat Bilgisini Ayırma
SQL Server'da tarih bilgisi için sıkça kullanılan DateTime türü tarih ve saat bilgisini bir arada tutmaktadır. Kullanıcı bir kalkış yeri, varış yeri ve tarih seçtiğinde saati farketmeksizin o gün kalkış ve varış yeri uyan tüm seferler listelenmeli. İşte burada tarih bilgisini saat bilgisinden ayırmak gerekiyor. Onu da şöyle yapabiliriz:
SqlCommand cmd = new SqlCommand("SELECT * FROM V_Sefer WHERE KalkisID=@kalkisID AND VarisID=@varisID AND CAST(FLOOR(CAST(Tarih AS FLOAT)) AS DATETIME)=@tarih ", baglanti);
Benim sorgum bu şekildeydi ama önemli olan kısım bu:
CAST(FLOOR(CAST(Tarih AS FLOAT)) AS DATETIME)
(Burada Tarih denilen yer V_Sefer adlı View'daki (yukarıda görselini paylaştığım view) tarih-saat bilgisi içeren sütunun adı.)
Bazen işime yarayabilen 3 ipucunu sizinle paylaştım. Yararı olması dileğiyle.