2010-06-23 52 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))