2010-06-23 51 views
2

我有以下代码,我可以筛选网格上的数据,但是当我在2 datepicker中选择相同的日期时,它什么也没有显示。我该如何解决这个问题。任何帮助将不胜感激。在vb.net的日期范围

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 

感谢

回答

0

更改您的查询,以低于或等于到结束日期。

SELECT * FROM tblMeter WHERE(日期> = @startDate)AND(日期< = @EndDate)

+1

如预期,这可能无法正常工作。如果起始日期和结束日期分别为2010年1月1日和2010年1月20日,则查询将查找日期在2010年1月1日00:00至2010年1月20日00:00之间的所有记录。因此,您将在2010年1月20日获得午夜日期的记录,但不会在同一天午夜之后的任何时间记录。 – NYSystemsAnalyst 2010-06-23 13:21:44

+0

我试过这个已经没有效果。 – Hakan 2010-06-23 13:41:23

0

这是你的逻辑:

如果日期是2001年,你输入2001:

2001 > = 2001 - 检查
2001 - 都能跟得上

0

尝试改变独家

(Date < @endDate)

的包容性

(Date <= @endDate)

+1

这不会帮助。它仍然只有一毫秒的范围。 – 2010-06-23 13:22:34

3

参数2 =新SqlCeParameter( “@结束日期”,DateTimePicker2.Value.AddDays(1))

+0

是的,时间将是00:00:00,所以你需要添加一天。添加一天使时间范围从00:00:00到23:59:59。 – 2010-06-23 13:21:27

+0

不再工作。 – Hakan 2010-06-23 13:36:01

+1

你可以用你的更新代码编辑你的问题吗?此外,我讨厌听起来粗鲁,但你确定你有符合你的查询参数的数据?如果您在SQL Management Studio中执行查询:SELECT * FROM tblMeter WHERE(Date> ='20100623')AND(Date <'20100624')您会得到结果吗?当然代替你自己的约会。 – NYSystemsAnalyst 2010-06-23 13:59:00

1

这是因为@EndDate意味着时间00: 00,包括全天加时间23:59:59。或者给@endDate加1。

2

请记住,Sql Server解释这样的日期:2010-06-23
作为这样的日期:2010-06-23 00:00:00.000

换句话说,即使您使用> =和< =来检查两端的范围,您仍然只给自己一个毫秒的时间间隔。有时候,如果列中的所有日期都没有时间分量,但你很少真正想要的。相反,您需要将一天添加到范围的末尾,以便过滤器包含整个一天,而不仅仅是第一个毫秒。

0

您可以使用:

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