我正在尝试执行一个SQL语句,该语句在两个日期表示的给定时间段内抓取数据。虽然我已经验证了我交换SQL参数的参数值是正确的值,但我仍然得到这个例外:
将字符串转换为smalldatetime数据类型的语法错误
这是C#代码:
SqlCommand command = new SqlCommand("SELECT date, @Data FROM datasite WHERE date > '@Start' and date < '@End'", conn);
command.Parameters.AddWithValue("@Data", dataType);
var start = dateRange.StartDate.ToShortDateString();
var end = dateRange.EndDate.ToShortDateString();
command.Parameters.AddWithValue("@Start", start);
command.Parameters.AddWithValue("@End", end);
command.Connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read()) { //... }
答案 0 :(得分:4)
需要考虑的一些事项:
ToShortDateString()
投射日期。相反,您只需将Date变量作为参数值传递:command.Parameters.AddWithValue("@Start", dateRange.StartDate);
@Start
和@End
变量周围的单引号。相反,您可以使用:WHERE date > @Start AND date < @End
答案 1 :(得分:1)
最好将日期格式化为sql语句的已知格式 例如
dateRange.EndDate.ToString("yyyy-MM-dd hh:mm:ss");
答案 2 :(得分:1)
您可能需要从命令字符串中删除单引号。
"SELECT date, @Data FROM datasite WHERE date > '@Start' and date < '@End'"
要
"SELECT date, @Data FROM datasite WHERE date > @Start and date < @End"