vb.net 中的日期范围
Posted
技术标签:
【中文标题】vb.net 中的日期范围【英文标题】:Date range in vb.net 【发布时间】:2010-06-23 13:15:28 【问题描述】:我有以下代码,我可以过滤网格上的数据,但是当我在 2 日期选择器中选择相同的日期时,它什么也没显示。我该如何解决这个问题。任何帮助将不胜感激。
con = New SqlCeConnection(constring)
con.Open()
cmd = New SqlCeCommand("SELECT * FROM tblMeter WHERE (Date >= @startDate) AND (Date < @endDate)", con)
Dim param1, param2 As SqlCeParameter
param1 = New SqlCeParameter("@startDate", DateTimePicker1.Value)
param2 = New SqlCeParameter("@endDate", DateTimePicker2.Value)
cmd.Parameters.Add(param1)
cmd.Parameters.Add(param2)
Dim da As New SqlCeDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
con.Close()
DataGridView1.DataSource = dt
谢谢
【问题讨论】:
【参考方案1】:param2 = New SqlCeParameter("@endDate", DateTimePicker2.Value.AddDays(1))
【讨论】:
是的,时间是00:00:00,所以你需要加一天。添加一天会使时间范围从 00:00:00 变为 23:59:59。 你能用你更新的代码编辑你的问题吗?另外,我讨厌听起来很粗鲁,但是您确定您的数据符合您的查询参数吗?如果在 SQL Management Studio 中执行查询: SELECT * FROM tblMeter WHERE (Date >= '20100623') AND (Date 【参考方案2】:请记住,Sql Server 会像这样解释日期:2010-06-23
像这样的日期:2010-06-23 00:00:00.000
。
换句话说,即使您使用 >= 和
【讨论】:
【参考方案3】:这是因为@endDate 暗示时间 00:00,包括全天加上时间 23:59:59。或将 1 添加到 @endDate。
【讨论】:
【参考方案4】:将您的查询更改为小于或等于您的结束日期。
SELECT * FROM tblMeter WHERE (Date >= @startDate) AND (Date
【讨论】:
这可能无法按预期工作。如果开始和结束日期是 1/1/2010 和 1/20/2010,则查询将查找日期在 1/1/2010 00:00 和 1/20/2010 00:00 之间的所有记录。因此,您将获得日期为 2010 年 1 月 20 日午夜的记录,而不是同一日期午夜之后任何时间的记录。【参考方案5】:这是你的逻辑:
如果日期是 2001 并且您输入 2001:
2001 >= 2001 - 检查 2001
【讨论】:
【参考方案6】:尝试更改独占
(Date < @endDate)
包容
(Date <= @endDate)
【讨论】:
这无济于事。它仍然只是一毫秒的范围。【参考方案7】:你可以使用:
param1 = New SqlCeParameter("@startDate", DateTimePicker1.Value.ToShortDateString)
param2 = New SqlCeParameter("@endDate", DateTimePicker2.Value.AddMinutes(1))
【讨论】:
以上是关于vb.net 中的日期范围的主要内容,如果未能解决你的问题,请参考以下文章