none
ASP.NET ACCESS veri tabanından tarih sorgulamaları RRS feed

  • 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.

    29 Nisan 2013 Pazartesi 21:49

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
    MCC

    30 Nisan 2013 Salı 06:19
    Moderatör

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
    MCC

    30 Nisan 2013 Salı 06:19
    Moderatör
  • 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.

    30 Nisan 2013 Salı 12:59
  • 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
    MCC

    30 Nisan 2013 Salı 20:21
    Moderatör
  • Sn. Önay YALÇINER;

    Anladım. Cevabınız için teşekkür ederim.

    İyi günler.

    4 Mayıs 2013 Cumartesi 13:12