2012-08-16 172 views
0

我有一個應用程序從MySQL數據庫中取出日期(字符串格式:01-jan-2000)。我需要將這些數據與在TextBox中輸入的日期進行比較。字符串日期比較C#

這是我到目前爲止有:

String query = "select * from tb_demographic_data where date_of_birth LIKE '%" + 
     txb_startDate.Text + "' OR (str_to_date(date_of_birth,'%d,%b,%Y') <= 
     str_to_date('"+txb_startDate.Text+"','%d,%b,%Y')) 

當我運行查詢我沒有得到任何結果。我的sql代碼沒有錯。我認爲發生錯誤時,我將字符串更改爲str_to_date()的日期。誰能幫忙?

+0

嘗試輸出mysql的日期文本框和檢查,如果格式是一樣的... – perilbrain 2012-08-16 14:28:15

+0

這看起來像一個SQL注入等待發生。 – Magnus 2012-08-16 14:32:44

回答

0

它看起來像你的日期格式是錯誤的... '%d,%b,%Y'是說分隔符是逗號。我會想像你想要的東西像'%d-%b-%Y'

+0

感謝您的快速回答。但是現在查詢只是提出了數據庫中的所有字段。它仍然不能識別比較 – 2012-08-16 14:38:38

+0

在這種情況下,也許你可以在發送到數據庫之前發送SQL字符串。你有沒有寫過一個SQL語句,你可以直接對數據庫運行(即不通過代碼),做你想做的事情?爲什麼你的數據庫中的日期是一個字符串? :) – Chris 2012-08-16 14:46:49

+0

我會單獨在mysql中測試它,並嘗試將該字段更改爲DateTime。感謝您的反饋:) – 2012-08-16 14:55:05

1

不要做日期的字符串比較。將數據庫中的列更改爲日期,並使用參數化語句或類似語句更新查詢以接受日期值。

0

正如Nikhil指出的,讓用戶在日期/日曆/時鐘控件中輸入日期通常是更好的選擇。另外,我強烈建議不要從文本框中獲取用戶輸入,而只是將其粘貼到SQL字符串中。這導致SQLinjection

我建議您使用上述建議的控件之一來讓用戶指定一個特定的DateTimeconvert the data in your text box to a DateTime object。假設您正在使用DbCommand對象運行查詢,則可以使用參數化查詢並將DateTime作爲參數傳入,而不是直接將其放入命令中。你的SQL可能看起來像以下:

select * from tb_demographic_data 
where date_of_birth <= @startDate 

你將不得不爲DbParameter添加到您的DbCommand"@startDate"一個ParameterName和你DateTime對象的Value

0

我想通了。我相信它不是最有效的方法,但我對此很新。這裏是:我只是將兩個字符串解析爲日期並計算它們之間的日期差異。如果答案是肯定的,則第一個日期到來之前,第二,反之亦然

select * from tb_demographic_data 
where date_of_birth 
    LIKE '%" + txb_startDate.Text + "' 
    OR (datediff(str_to_date('" + txb_startDate.Text + "', 
          '%d-%b-%Y'), 
       str_to_date(date_of_birth, 
          '%d-%b-%Y'))>=0) 
+0

不要通過連接不可信(讀取:用戶提供的)字符串來構建sql查詢。使用參數化查詢並添加用戶輸入作爲參數。 – bmm6o 2012-08-29 17:33:44