将char数据类型转换为datetime数据类型会导致日期时间值超出范围。 SQLEXCEPTION

时间:2014-06-04 06:53:38

标签: c# datetime

我是asp.net的初学者。我正在使用查询:

 string num = ("SELECT count(*) from booking WHERE date='" + dt + "' AND start_time='" + stime + "' AND end_time='" + etime + "' AND lid='" + hostloc + "'");

SqlCommand cmd = new SqlCommand(num, con);

con.Open();

int count = (int)cmd.ExecuteScalar();

con.Close(); 

有时当我提交我的网页表单时,它会给我一个SqlException:

  

"生成了char数据类型到datetime数据类型的转换   在超出范围的日期时间值。"

这不会永远发生!! 请,任何帮助表示赞赏.. 提前谢谢

2 个答案:

答案 0 :(得分:0)

首先,为SQL调用使用参数化查询,否则很快就会注入SQL。

此外,您需要在将变量发送到SQL Server之前将dt转换为datetime,以避免此类错误,例如Convert.ToDatetime(dt)

答案 1 :(得分:0)

string num = "SELECT count(*) from booking WHERE date=@dt AND start_time=@stime AND end_time=@etime AND lid=@hostloc";

using(SqlCommand cmd = new SqlCommand(num, con))
{
    cmd.Parameters.AddWithValue("dt", dt);
    // etc for all params
    con.Open();

    int count = (int)cmd.ExecuteScalar();
}

请注意,这假设dtDateTime等。

这解决了多个问题,包括格式化,本地化和SQL注入。