Этот подход неверен.
Чтобы дата была между двумя интервальными датами, ей не нужно иметь число дней между двумя датами, например. (псевдокод)
date = May-25-2012; startDate = March-15-2012, endDate = June-01-2012
date
явно находится между startDate
и endDate
, но day(date)
равен 25 , который не находится между day(startDate) = 15
и day(endDate) = 1
Аналогичный пример может быть сделан для месячной части даты (например, date = May-25-2012; startDate = September-15-2010, endDate = Match-01-2015
)
Вам нужно принять значения за день, месяц, год и построить дату либо в приложении, либо в на сервере и использовать это для сравнения значений.
Чтобы сделать дату из текстовых полей в VB
Dim startDate = new DateTime(
Convert.ToInt32(cbosyear.Text),
Convert.ToInt32(cbosmonth.Text),
Convert.ToInt32(cbosday.Text))
Обратите внимание, что это не произойдет, если пользователь войдет , например «некоторый текст» для значения года. Для этого вам нужно добавить некоторые проверки данных.
Чтобы сделать datetime из частей на SQL Server, посмотрите здесь , объясняется несколько методов.
Кроме того, вы должны всегда избегать просто вставки значений в строку sql, которая запрашивает проблемы с sql-инъекциями. Вы должны сделать что-то вроде этого:
Dim command = new SqlCommand()
command.CommandText = "SELECT .... FROM tblagents where DATEFROMPARTS(year, month, day) between @startDate AND @endDate"
command.Parameters.AddWithValue("@startDate", startDate)
command.Parameters.AddWithValue("@endDate", endDate)