En iyi yanıtlayıcılar
ASP.NET ACCESS veri tabanından tarih sorgulamaları

Soru
-
Merhaba Arkadaşlar;
Ben ASP.NET ile bir projemde access veritanındaki bir tablodan tarih alanını sorgulamak istiyorum.
Kod Satırı;
SQL = "SELECT Seferler.SeferId, [GuzergahKalkis]+'-'+[GuzergahVaris] AS Guzergah, [Marka]+'-'+[Model] AS AracBilgisi, Seferler.GuzergahTarihi, Seferler.GuzergahSaati, Seferler.AracPlaka, Guzergahlar.Ucret FROM Araclar INNER JOIN (Seferler INNER JOIN Guzergahlar ON Seferler.GuzergahId = Guzergahlar.GuzergahId) ON Araclar.AracPlaka = Seferler.AracPlaka WHERE Guzergahlar.GuzergahKalkis='" + DDLKalkis.Text + "' AND Guzergahlar.GuzergahVaris='" + DDLVaris.Text + "' AND Seferler.GuzergahTarihi=" + Convert.ToDateTime(Request.Form["pickerr"]); DTGuzergah = vt.DTsorgu(SQL); gvGuzergahlar.DataSource = DTGuzergah; gvGuzergahlar.DataBind();
SQL kod satırının en sonunda bu işlemi yapıyorum.
Tarih değerini input text(input text in "name" i ="pickerr") den alıyorum ve tarihe çeviriyorum yalnız sorgularken hata alıyorum
Hata mesajı;
---------------------------------------
Syntax error (missing operator) in query expression 'Guzergahlar.GuzergahKalkis='BODRUM' AND Guzergahlar.GuzergahVaris='ISPARTA' AND Seferler.GuzergahTarihi=04.04.2013 00:00:00'.
-----------------------------------------
Tarih sorgulamasını sql sorgusundan çıkardığım zaman sql sorgusu çalışıyor.
NOT: Veri tabanındaki GuzergahTarihi alanın türü Tarih - Kısa tarih
Bu hata neden kaynaklanıyor olabilir.
Yardımlarınız için şimdiden teşekkürler.
Saygılar.
Yanıtlar
-
Yanlış yapıyorsunuz, kodunuzda sql injection açığı var. ADO.Net kullanmalısınız;
OleDbCommand _cmd = new OleDbCommand("select * from Tablo1 where tarih = ?", _connection); _cmd.Parameters.AddWithValue("tarih", picker.Text); OleDbDataAdapter _da = new OleDbDataAdapter(_cmd); DataTable _dt = new DataTable(); _da.Fill(_da); gridView1.DataSource = _dt; gridView1.DataBind();
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak İşaretleyen Yunus Emre ALTINAY 30 Nisan 2013 Salı 13:54
Tüm Yanıtlar
-
Yanlış yapıyorsunuz, kodunuzda sql injection açığı var. ADO.Net kullanmalısınız;
OleDbCommand _cmd = new OleDbCommand("select * from Tablo1 where tarih = ?", _connection); _cmd.Parameters.AddWithValue("tarih", picker.Text); OleDbDataAdapter _da = new OleDbDataAdapter(_cmd); DataTable _dt = new DataTable(); _da.Fill(_da); gridView1.DataSource = _dt; gridView1.DataBind();
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak İşaretleyen Yunus Emre ALTINAY 30 Nisan 2013 Salı 13:54
-
Sn. ÖMER YALÇINER
Cevabınız için teşekkür ederim.
Bu şekilde parametre gönderdiğimde herhangi bir sorun kalmadı ve sorgu çalıştı.
Yanlız anlamadım nokta parametre göndermeden de aynı SQL cümlesini yazmıştım
neden hata aldım? sorun neyden kaynaklanıyordu.?
SQL = "SELECT Seferler.SeferId, [GuzergahKalkis]+'-'+[GuzergahVaris] AS Guzergah, [Marka]+'-'+[Model] AS AracBilgisi, Seferler.GuzergahTarihi, Seferler.GuzergahSaati, Seferler.AracPlaka, Guzergahlar.Ucret FROM Araclar INNER JOIN (Seferler INNER JOIN Guzergahlar ON Seferler.GuzergahId = Guzergahlar.GuzergahId) ON Araclar.AracPlaka = Seferler.AracPlaka WHERE Guzergahlar.GuzergahKalkis=@GuzergahKalkis AND Guzergahlar.GuzergahVaris=@GuzergahVaris AND Seferler.GuzergahTarihi=@GuzergahTarihi"; Komut = new OleDbCommand(SQL, vtBaglan.Baglanti); Komut.Parameters.AddWithValue("@GuzergahKalkis", DDLKalkis.Text); Komut.Parameters.AddWithValue("@GuzergahVaris", DDLVaris.Text); Komut.Parameters.AddWithValue("@GuzergahTarihi", Request.Form["pickerr"]); DA = new OleDbDataAdapter(Komut); DTGuzergah = new DataTable(); DA.Fill(DTGuzergah); gvGuzergahlar.DataSource = DTGuzergah; gvGuzergahlar.DataBind();
Biliyorsanız paylaşırsanız sevinirim.
Tekrardan teşekkürler.
İyi günler.
- Düzenleyen Yunus Emre ALTINAY 30 Nisan 2013 Salı 13:41
-
Sorgu içinde tarih şu şekilde olmalı;
select * from Tablo where alan1 < '2013-04-30 00:00:00'
ama siz Convert.ToDateTime ile (regional settingse bağlı olarak) şuna benzer bişey elde ediyordunuz;
select * from Tablo1 where alan1 < '30th April, 2013 12:00:00.000'
AddWithValue sizin için yukarıdakini ayarladığı için çalıştı.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
-