2014-01-27 3 views
-6

Мой код:Поиск по дате SQL ASP.NET

DateTime date = DateTime.Now; 
OleDbConnection con = new OleDbConnection(); 
con.ConnectionString = "provider=microsoft.jet.oledb.4.0; data source=D:/c# database/Database3.mdb"; 
con.Open(); 
DataSet ds = new DataSet(); 
OleDbDataAdapter da = new OleDbDataAdapter(); 
da = new OleDbDataAdapter("Select * From TEST WHERE MatchDate >= '"+ date.ToString() +"'", con); 
da.Fill(ds); 
Repeater1.DataSource = ds; 
Repeater1.DataBind(); 
con.Close(); 

могли бы вы сказать мне, почему этот код не будет работать?. Программа бросает исключение. Я использую базу данных MS Access. Формат даты в databese выглядит так: «2014-06-27 18:45:00»

+7

И исключение? – Pleun

+0

Да, извините за это. Я использую польскую версию «Visual web developer», на английском языке это исключение должно быть похоже на «несоответствие типа данных в выражении критериев». Надеюсь, что так, вы узнаете, что это значит. – Shagohad

+0

В качестве стороннего (так как использование параметризованного запроса - это путь), вы не ограничиваете даты с кавычками в Access, а '' '. Это объясняет туманность (дата по сравнению с строкой). Это действительно только вступает в игру, если вам нужно жестко указать дату в вашей строке, например. 'where somedate <# 2008-07-31 #' –

ответ

3

Вы должны параметризовать ваш запрос. DateTime не имеет никакого формата, связанного с ним, формат полезен только для отображения цели.

OleDbCommand cmd = new OleDbCommand("Select * From TEST WHERE MatchDate >= @matchDate", conn); 
cmd.Parameters.AddWithValue("@matchDate", DateTime.Today); // Just date part comparision 
                  // Or use DateTime.Now depending on your requirement) 

OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
da.Fill(ds); 

Это избавит вас от SQL Injection, а также, и это будет заботиться о стоимости DateTime.

Кроме того, вместо DateTime.Now кажется, что вы хотите сравнивать записи больше определенной даты, вместо даты и времени, используйте DateTime.Today или DateTime.Now.Date. Это будет иметь временную часть, установленную на 00:00, чтобы вы могли сравнивать записи с определенной датой.

Вы должны также приложить свои объекты Command/Connection оператором using, поскольку они реализуют интерфейс IDisposable и будут обеспечивать удаление соединения даже в случае исключения.

+1

Большое спасибо за ответ, я постараюсь с этим. – Shagohad

+1

Еще раз спасибо, это работает! – Shagohad