0

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

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'

我究竟做错了什么?

4

3 回答 3

2

您正在传递一个String值来选择一个datetime字段。因此,您需要先将其转换为日期时间:

Convert(datetime,'2012-04-17 19:42:49.650', 102)

除此之外,您可能会像@Mr47 提到的那样对 SQL 注入SqlParameters开放,使用.

于 2012-04-18T13:18:07.920 回答
0

请注意,SQL 的datetime类型不能保存1753-01-01.

只需在用于查询数据库之前使用调试器检查 SQL 字符串以查找问题。

但是,最好的办法是使用参数化查询(如本例所示);否则你很容易受到SQL Injection的攻击。

于 2012-04-18T13:16:04.770 回答
0

Equipment.CreatedOn 的价值是什么?

我认为 sql-server 或您的应用程序中的文化设置存在问题。它不能直接掩盖您的日期。用户文化设置将解决问题。

于 2012-04-18T13:21:49.890 回答