2012-07-27 102 views
0
string queryStr = "SELECT * from Task_Report_Table where convert(varchar, date, 105) between '" + txtStartDate.Text.ToString() + "' and '" + txtEndDate.Text.ToString() + "' "; 

這是我用於從數據庫中重新獲取值的查詢。我需要在開始日期和結束日期驗證Entair日期

在數據庫表Task_Report_Table有coloums日期,名稱,任務和Hours.Here日期是datetime數據類型,所以在查詢轉換成字符串和蔭匹配日

我有一個UI開始日期和結束日期。通過在UI中給出日期。上述提及查詢將必須顯示記錄。

如果Iam給予開始日期07-07-2012和結束日期爲2012年12月7日。它顯示07-07-2012和12-07-2012值之間的值。但事情是它顯示下個月和上個月的記錄以及下一年和上一年的記錄也會記錄在數據庫中。

問題是它只驗證一天,但不是月和​​年。 我需要驗證日期,月份,年份哪些iam在UI中提供。

回答

3

您不希望永遠不會像這樣寫SQL,也不要將字符串串聯在一起,使用這種代碼很容易破解(使用SQL注入)一個網站。

試試這個:

SELECT * from Task_Report_Table where date between @startdate and @enddate 

,然後添加開始日期和結束日期爲SqlParameterSqlCommand你使用,就像這樣:

SqlCommand command = new SqlCommand(yourSQL, connection); 
command.Parameters.Add(new SqlParameter("startdate", DateTime.Parse(txtStartDate.Text))); 
command.Parameters.Add(new SqlParameter("enddate", DateTime.Parse(txtEndDate.Text))); 
+0

在數據庫中,我有日期科拉姆only.By查詢我要Display.so這是必須向代表查詢就像那個。我想。 – 2012-07-27 09:20:15

+0

嘗試編碼,它的工作原理與您發佈的代碼完全相同,只是更安全,而且您不必擔心從用戶收集的日期格式,DateTime.Parse會爲您做到這一點! – 2012-07-27 09:23:39

1

的習題的是它僅驗證一天。但不包括月和年。我需要 驗證了日,月,年

convert(varchar, date, 105)會給你一個字符串,它看起來像這樣27-07-2012不是約會。所以你的查詢比較字符串不是日期。

使用@SteenT建議的日期參數。

0

嘗試這樣 把兩個變量爲文本框..

txtStatrdate.text=strdate; 

txtEndDate.text=enddate ; 

CONVERT(VARCHAR(10),date,101) BETWEEN CONVERT(DATETIME,strdate,101) AND 
     CONVERT(DATETIME,enddate,101) 
相關問題