2014-04-18 189 views
1

我試圖運行以下簡單的SQL查詢來選擇兩個日期之間的數據。來自以下DateTimePickers日期:DTP_FromDTP_To從字符串中轉換日期和/或時間時DateTime轉換失敗

 DateTime startDate = DTP_From.Value.Date; 
     DateTime endDate = DTP_To.Value.Date; 
     SqlConnection con = new SqlConnection(strConnection); 
     con.Open(); 
     SqlCommand sqlCmd = new SqlCommand(); 
     sqlCmd.Connection = con; 
     sqlCmd.CommandType = CommandType.Text; 
     sqlCmd.CommandText = "SELECT * From Report_Sales where Date >= '" + startDate + "' AND Date <= '" + endDate + "'"; 

當執行查詢我得到以下錯誤:

datetime conversion failed when converting date and/or time from character string

如何運行上面的查詢無錯?

+0

我想喜歡使用「介於」關鍵字來代替> =和<=運營商 – Shell

+0

將日期轉換爲'yyyy-MM-dd HH:mm'格式。並確保endDate的開始日期必須是00:00和23:29,否則某些記錄將不會顯示。 – Shell

回答

3

參數化您的查詢以避免這樣的問題。

sqlCmd.CommandText = "SELECT * From Report_Sales where Date >= @startDate AND Date <= @endDate"; 
sqlCmd.Parameters.AddWithValue("@startDate", startDate); 
sqlCmd.Parameters.AddWithValue("@endDate", endDate); 
+0

工作我會馬克作爲答案謝謝! – SOFKiNG

0

如果你不按照格蘭特Winney的優秀建議parametise您的疑問,這也將幫助你避免其他攻擊的威脅;包括DateTime數據到它需要使用ISO 8601的風格被格式化的Transact-SQL查詢:

YYYY-MM-DDThh:mm:ss.nnn[Z]

SELECT * 
FROM Report_Sales 
WHERE Date >= '2014-04-18T21:26:01Z' 
AND Date <= '2014-04-18T22:26:01Z' 
相關問題