2013-05-05 80 views
0

我有一個選擇使用WHERE子句中的兩個datetimepickers中的datetime。在SELECT運行良好,填充一個DataGrid,沒有問題,但bizzarely的SELECT的日期時間部分被完全忽略,「WHERE x_account_id =」 + subaccountID被僱用整件事返回記錄好像只有:SQL Server CE和日期時間選擇問題(C#)

SqlCeConnection conn = new SqlCeConnection(Lib.ConnectionString); 
string sql = "SELECT x_scaleid, x_weight, x_timestamp FROM x WHERE x_account_id = " + subaccountID 
    + " AND (x_timestamp BETWEEN @start_date AND @end_date) ORDER BY x_timestamp DESC"; 
SqlCeCommand cmd = new SqlCeCommand(sql, conn); 
cmd.Parameters.Add("@start_date", SqlDbType.DateTime, 8).Value = dFromFilter.Value.Date; 
cmd.Parameters.Add("@end_date", SqlDbType.DateTime, 8).Value = dToFilter.Value.Date; 
SqlCeDataAdapter da = new SqlCeDataAdapter(); 
da.SelectCommand = cmd; 

無法在網上找到任何具有相同問題的人,所以我有點卡住了。也許我最好將所有日期時間轉換爲int,並以這種方式存儲它們 - 總是討厭使用datetime類型。

在任何人問起之前,我已經嘗試過各種版本的條款,包括使用'<'和'>'以及不同的CONVERT變體。

+0

您是否使用任何類似工具的分析器來檢查在數據庫中收到的查詢。可能有時,dFromFiler或dToFilter可能具有'DateTime'最小值或最大值。 – Saravanan 2013-05-05 09:00:30

+0

我已經使用SQL Server Compact Tool直接運行查詢,並且dFromFiler和dToFilter都有最寬的最大和最小日期範圍。我自己的直覺是它是一個格式問題 - 日期時間的數據庫格式和C#發送的數據有所不同。 – Gaddo 2013-05-05 09:54:16

+0

在這種情況下,嘗試將日期時間格式化爲字符串,並使用任何SQL Server代碼(如101,103)格式化SQL的datetime – Saravanan 2013-05-05 09:58:03

回答

0

我'解決'了這個問題,並通過'解決'我的意思是在黑客中。

我在DB中創建了一個新列,在x表中鍵入int。當我用當前時間填充x_timestamp,從應用程序派生出來的時候,我使用'yyyymmdd'格式構建的日期填充這個新列。因此,在進行任何篩選時,使用日期,我可以簡單地使用所挑選的兩個日期(在應用程序中再次轉換爲類似的int格式)進行數字比較。作品一種享受。因爲它複製了數據庫中的數據,所以它不是一個理想的解決方案,但截止日期是截止日期,如果沒有其他人可以在這裏提出更好的解決方案,那麼這個解決方案可能對有類似問題的其他人有所幫助在將來。