2017-02-23 20 views
0

Я довольно новичок в SQL. В принципе у меня есть база данных с именем столбца «Дата», и я хочу, чтобы вернуть все записи таким образом, что «Дата» между startDate и endDateПоиск записи по диапазону дат

Dim myStr As String = String.Format("Select * from {0} where [Date] between @date1 and @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("dd/MM/yyyy")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("dd/MM/yyyy")) 

где frm это время выбора даты форм Windows.

Не знаете, где я ошибся, но запрос ничего не возвращает.

+3

Вы должны проездом даты в запросе, и вы называете 'ToString'. НЕ конвертируйте двоичное значение 'Date' в строку' String'. Если то, что вы на самом деле хотите сделать, - это нулевое время, то это то, что вы делаете, т. Е. Используйте 'frm.StartDate.Value.Date'. – jmcilhinney

ответ

1
Dim myStr As String = String.Format("SELECT * FROM {0} WHERE [Date] >= @date1 AND < @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.Add("@date1" SqlDbType.DateTime).Value = frm.StartDate.Value.Date 
ad.SelectCommand.Parameters.Add("@date2", SqlDbType.DateTime).Value = frm.EndDate.Value.Date.AddDays(1) 
-1

Если вы установили 'dd/MM/yyyy', SQL вернет ошибку 'Преобразование типа данных varchar в тип данных DateTime приводит к значению вне диапазона.' Я думаю, вы должны установить формат, как показано ниже.

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("yyyy/MM/dd")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("yyyy/MM/dd")) 
+1

Если вы используете строку, чтобы установить значение даты для запроса вообще, вы по-прежнему делаете это неправильно. –

+0

@JoelCoehoorn: Почему нельзя использовать строку для установки значения даты, мой друг? Пример: выберите топ 10 FirstName, ModifiedDate от Person.Person где ModifiedDate между '2009/01/10' и '2009/01/20' – Tomato32

+0

Несколько причин. Во-первых, у сервера может быть другой формат даты, который вы ожидаете. Это все забава и игры, пока вы не получите клиента в Германии, или кто-то выбирает неправильный регион для экземпляра Azure. Другая причина - [производительность] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/). –

Смежные вопросы