2015-06-16 28 views
0

我有一個From和To DateTimePicker。我將它們轉換爲String並使用它來過濾特定範圍的MsAccess database,但過濾存在問題。例如,我想從2015年1月1日至2015年1月31日過濾。結果包括前幾年的1月份。我的發言似乎有什麼問題?獲取Date Date Picker的值並使用BETWEEN在Ms Access數據庫中過濾日期

這是我的代碼:

Dim connectionstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\STSlog.mdb;Jet OLEDB:Database Password=password;" 
Dim conn As New OleDbConnection(connectionstring) 
Dim command As New OleDbCommand 
Dim commstring As String 
Dim fromdatestring As String = FromDPicker.Value.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture) 
Dim todatestring As String = ToDPicker.Value.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture) 

commstring = "SELECT Mark, ProjectCode, Project, Activity, today, Regular, OT FROM data WHERE today BETWEEN '" & fromdatestring & "' AND '" & todatestring & "' AND empno = '" & TimeSheetAdmin.EmpNumCmbBox.SelectedItem.ToString & "' ORDER BY VAL(Mark) DESC" 
command = New OleDbCommand(commstring, conn) 
+0

爲什麼要將日期時間轉換爲字符串?這太愚蠢了。使用參數化查詢,然後您不必擔心它。另外,您將消除您擁有的SQL注入安全漏洞。 –

+0

我的數據庫中的日期字段是短文本類型的列。 – Kreyah

回答

1

變化

..."WHERE today BETWEEN '" & fromdatestring & "' AND '" & todatestring & "'"... 

..."WHERE today >= #" & fromdatestring & "# AND today <= #" & todatestring & "#"... 

請注意,MS-Access使用#-Delimiters爲Date - 值(據我所知)這也可能是您的查詢中的問題。

+0

即使該列是短文本類型而不是日期時間,這是否可以工作? – Kreyah

+0

我不這麼認爲,但實際上取決於你設定日期的方式。 '2015年7月31日的20150731'可能會有效,因爲20.150.731比2015年3月23日的'20150323'更大。 但我強烈建議將您的列的DataType更改爲Date,因爲不同的DataType存在的原因是Aaron Bertrand在[寫得很好的文章]中說過的(http://sqlblog.com/blogs/aaron_bertrand/archive /2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx)。 – M463

+0

您的代碼正在工作。我將數據類型更改爲日期。謝謝! – Kreyah