2014-02-13 88 views
1

我有一個查詢mysql數據庫的vb.net程序。我可以搜索並使用此代碼日期間獲得記錄:vb.net與MySQL如何選擇不同年份的日期之間?

sqlQRY12 = "SELECT * from mating WHERE date BETWEEN '" & export_daily_date_DateTimePicker1.Text & "' AND '" & export_daily_date_DateTimePicker2.Text & "' AND chkbox = '0' ORDER BY lot_id ASC" 

我對我的日期格式爲:

 export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom 
    export_daily_date_DateTimePicker1.CustomFormat = "MM/dd/yy" 

    export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom 
    export_daily_date_DateTimePicker2.CustomFormat = "MM/dd/yy" 

但是如果我設法在歷時兩年像13年12月20日之間進行搜索 - 2014年2月20日當我知道它們存在時,我沒有返回記錄?任何幫助將會很好

回答

1

通常在數據庫查詢中表示爲字符串的日期應採用格式「YYYY-MM-DD」。

基本上只是想讓你執行的查詢是這樣的:

SELECT * from mating 
WHERE date BETWEEN '2013-12-20' AND '2014-02-20' 

因此改變你的dtpickers的格式是YYYY-MM-DD這樣的:

export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom 
export_daily_date_DateTimePicker1.CustomFormat = "yyyy-MM-dd" 

export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom 
export_daily_date_DateTimePicker2.CustomFormat = "yyyy-MM-dd" 
+1

或者,請參閱[本文](http://stackoverflow.com/questions/2440577/given-a-date-03-13-2010-using-that-in-a-mysql-where-子句),它顯示瞭如何在MySql中使用STR_TO_DATE()函數。如果你真的想在你的VB應用中保持mm/dd/yy的顯示格式,這個選擇會更好。 – Whitzz

+0

我看過帖子,我認爲STR_TO_DATE()函數將會非常有用。是的,我更喜歡使用該日期格式,因爲該程序已使用了幾個月。該數據已經在數據庫中以這種格式存在。直到新年來臨,我們才發現問題。 –

+0

好的,我改變了我的查詢:'sqlQRY12 =「選擇*從交配WHERE日期BETWEEN STR_TO_DATE('」&export_daily_date_DateTimePicker1.Text&「','%m /%d /%y')AND STR_TO_DATE('」&export_daily_date_DateTimePicker2。文本&「','%m /%d /%y')AND chkbox ='0'ORDER BY lot_id ASC」'但我仍然沒有收到任何記錄。沒有錯誤。任何幫助都會很棒。 ty –

1

你永遠不應該串聯值到您的SQL命令中。如果可能的話,你應該使用參數。通過參數,您可以將值指定爲實際類型(Date),而不是字符串表示形式。 ADO提供程序將爲您正確處理值的轉換。

cmd.CommandText = "SELECT * from mating WHERE date BETWEEN @date1 AND @date2 AND chkbox = '0' ORDER BY lot_id ASC" 
cmd.Parameters.AddWithValue("@date1", export_daily_date_DateTimePicker2.Value) 
cmd.Parameters.AddWithValue("@date2", export_daily_date_DateTimePicker2.Value) 
+0

ty我將不得不看看我能做些什麼來改善這個問題。 –

+0

我同意這種說法。對於新手來說,原因是通過連接輸入構建的SQL查詢容易出現Sql注入攻擊(攻擊者發送一個特殊設計的值,導致查詢獲取記錄並執行一個操作作爲第二條語句)。參數方法不容易受此影響(如果@ date1不是日期,DB將拋出異常並不執行)。然而,在亞倫的具體情況下,這可能不成問題;如果使用ASP WebForms,dtpicker.Value可能會在查詢之前進行驗證。不過這是最佳做法。 – Whitzz

+0

只能在LAN環境中訪問數據庫。此外,其嚴格的軟件訪問。並且允許的IP地址僅設置爲允許訪問數據庫的機器。 –

相關問題