Возникла проблема при сравнении значения даты, взятого из текстового поля, со значением даты и времени, хранящимся в базе данных. - PullRequest
0 голосов
/ 25 августа 2011

Более ясно:

На самом деле у меня есть значение даты и времени, хранящееся в базе данных. То, что я беру из текстового поля, является значением времени. Я хочу извлечь те результаты из базы данных, которые находятся между заданным значением времени .... Чтобы быть более кратким, мое приложение представляет собой систему бронирования для спортивного клуба и предоставляет возможность просматривать уже сделанные заказы .. Здесь я предлагаю два варианты, чтобы просмотреть все заказы для конкретной игры или отфильтровать заказы. В фильтрах бронирований одним из вариантов является фильтрация по дате и времени ... Опция даты работает нормально, но проблема заключается во временной части ... Я предоставляю два раза, но не могу просмотреть брони между ними ...

Мой код:

    Dim prmtimefrom As New SqlParameter("@booking_time", SqlDbType.DateTime)
    prmtimefrom.Value = TextBox3.Text

    Dim prmtimeto As New SqlParameter("@booking_tim", SqlDbType.DateTime)
    prmtimeto.Value = TextBox4.Text




    Dim da As New SqlDataAdapter("select * from Bookings where booking_time Between @booking_time AND @booking_tim AND game = " & x, con)   ' x is the name of a specific game

    da.SelectCommand.Parameters.Add(prmtimefrom)
    da.SelectCommand.Parameters.Add(prmtimeto)
    da.Fill(ds, "Bookings")

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Я думаю, что ваша проблема может заключаться в том, что когда записи хранятся в вашей базе данных в переменной DATETIME, они хранятся с частью даты.Когда вы пытаетесь запросить эти записи, вы также ищете значения, которые лежат между 2 значениями даты / времени.

Таким образом, в вашей базе данных время, вероятно, записывается так: «2011-08-24 06:00:00 ', но когда вы выполните запрос, , если вы не укажете дату , тогда значение для части даты будет '01 -01-1900'.Не найдено ни одного совпадения.

Чтобы исключить часть даты, вы можете сделать что-то вроде этого:

select * from Bookings 
WHERE 
DATEADD(day, -datediff(day, 0, booking_time), booking_time) 
Between DATEADD(day, -datediff(day, 0, @booking_time), @booking_time) AND 
DATEADD(day, -datediff(day, 0, @booking_tim), @booking_tim) 
AND game = " & x

Функция DATEADD удаляет дату и дает только часть времени даты.

Или вы можете изменить процесс, который хранит время бронирования в вашей базе данных, чтобы он всегда сохранял его с постоянной датой, скажем '01 -01-1900 '.

0 голосов
/ 25 августа 2011

Попробуйте выбросить время в формате 'гггг-мм-дд чч: мм: сс'. SQL Server всегда сможет сравнивать время в этом формате.

Кстати, я бы предложил переименовать ваш второй параметр времени. Это слишком похоже на первый и вызовет путаницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...