如何使用日期和时间变量进行数据库咨询?

时间:2012-04-18 13:11:03

标签: c# sql datetime

我有以下行代码用于从数据库中检索数据:

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'

我做错了什么?

3 个答案:

答案 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或你的应用程序中的文化设置有问题。它不能直接隐藏你的约会。用户文化设置将解决问题。