2014-04-18 181 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' 
相关问题