我有以下行代码用于从数据库中检索数据:
DataTable newEquipmentTable = database.Connection.RetrieveData(database.AdapterType, string.Format("SELECT ID FROM Equipment WHERE Name = '{0}' AND CreatedOn = '{1}'", equipment.Name, equipment.CreatedOn.ToString("yyyy-MM-dd HH:mm:ss.fff")));
它返回一个错误,说“将varchar数据类型转换为datetime数据类型导致超出范围的值”
当我直接咨询时,使用以下查询返回预期结果。
SELECT ID FROM Equipment WHERE Name = 'aa' AND CreatedOn = '2012-04-17 19:42:49.650'
我做错了什么?
答案 0 :(得分:2)
您正在传递String
值以选择datetime
字段。所以你需要先将它转换为日期时间:
Convert(datetime,'2012-04-17 19:42:49.650', 102)
除此之外,你可能会像@ Mr47提到的那样SQL-Injection开放,使用SqlParameters
。
答案 1 :(得分:0)
请注意,SQL的datetime
类型无法保存1753-01-01
之前的值。
在用于查询数据库以查找问题之前,只需使用调试器检查SQL字符串。
但是,最好的办法是使用参数化查询(如this example);否则你很容易受到SQL Injection的攻击。</ p>
答案 2 :(得分:0)
equipment.CreatedOn的价值是多少?
我认为sql-server或你的应用程序中的文化设置有问题。它不能直接隐藏你的约会。用户文化设置将解决问题。