我是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数据类型的转换 在超出范围的日期时间值。"
这不会永远发生!! 请,任何帮助表示赞赏.. 提前谢谢
答案 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();
}
请注意,这假设dt
是DateTime
等。
这解决了多个问题,包括格式化,本地化和SQL注入。