在将从文本框获取的日期值与存储在数据库中的日期时间值进行比较时遇到问题

时间:2011-08-25 19:34:54

标签: vb.net datetime

更清楚:

实际上我的日期时间值存储在数据库中。我从文本框中获取的是时间值。我想从数据库中提取这些在给定时间值之间的结果....为了更简洁,我的应用程序是体育俱乐部的预订系统,并提供查看alreaady预订的选项..这里我提供两个选项可以查看特定游戏的所有预订或过滤预订。在过滤器预订中,一个选项是过滤日期和时间...日期选项运行正常但问题在于时间部分...我提供两次但无法查看它们之间的预订...

我的代码是:

    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 :(得分:0)

尝试以“yyyy-MM-dd hh:mm:ss”格式投掷时间。 SQL Server始终能够以该格式比较时间。

在旁注中,我建议重命名第二次参数。它与第一个太相似,会引起混淆。

答案 1 :(得分:0)

我认为您的问题可能是当记录在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'。