使用DateTimes

时间:2016-05-04 16:28:08

标签: c# sql sql-server asp.net-web-api2

我正在尝试执行一个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()) { //... }

3 个答案:

答案 0 :(得分:4)

需要考虑的一些事项:

  1. 您无需使用ToShortDateString()投射日期。相反,您只需将Date变量作为参数值传递:command.Parameters.AddWithValue("@Start", dateRange.StartDate);
  2. 您的SqlCommand文字不需要@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"