获取错误将varchar数据类型转换为日期时间数据类型会导致超出范围的值。该语句已终止

时间:2014-02-13 07:27:14

标签: sql .net

这是我的代码

sqlcommand=new sqlcommand("inset into table values('"+home.name'"+,'"+home.DOJ'")",con);

1 个答案:

答案 0 :(得分:1)

您正在使用从DateTime(我假设)到字符串的本地默认字符串转换,然后希望它对SQL有效。

此外,您的代码有SQL injection attack vulnerability

这两个都可以修复 - 并且您的代码可读性 - 可以使用参数化SQL进行改进:

using (var command = new SqlCommand(
    "INSERT INTO Foo (Name, DOJ) Values (@Name, @DOJ)", connection))
{
    command.Parameters.Add("@Name", SqlDbType.VarChar).Value = home.name;
    command.Parameters.Add("@DOJ", SqlDbType.DateTime).Value = home.DOJ;
    ...
}

(相应地调整类型,例如使用SqlDbType.NVarCharSqlDbType.DateTime2。)

从不将值直接放入SQL中。使用参数化SQL是一个全面的胜利。