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 &lt; @endDate)

包容

(Date &lt;= @endDate)

【讨论】:

这无济于事。它仍然只是一毫秒的范围。【参考方案7】:

你可以使用:

param1 = New SqlCeParameter("@startDate", DateTimePicker1.Value.ToShortDateString)
param2 = New SqlCeParameter("@endDate", DateTimePicker2.Value.AddMinutes(1))

【讨论】:

以上是关于vb.net 中的日期范围的主要内容,如果未能解决你的问题,请参考以下文章

月历 vb.net 多个日期选择

VB.NET:PictureBox 视图范围?

指定网格值 VB.NET 的值范围

隐藏 VB.NET 扩展方法/模块

如何在 VB.NET 中将可为空的 DateTime 设置为空?

vb.net 中的日期格式问题