在这行代码中:
sql = "Select CustomerNumber,Surname,Villa,
Village,Suburb,BookedinDate,BookedInOrder
FROM Customers WHERE
(BookedInDate >= @StartPeriod And BookedInDate <= @EndPeriod )"
,其中
cmd.Parameters.AddWithValue("@StartPeriod", StartPeriod)
cmd.Parameters.AddWithValue("@EndPeriod", EndPeriod)
和
StartPeriod = "01-09-2017"
EndPeriod = "01-15-2017"
数据表包含BookedInDAte值为“01-09-2017”但未在上述Sqlite字符串中拾取的记录。
任何帮助将不胜感激 布拉德
答案 0 :(得分:1)
这是usual problem with AddWithValue。您传递给它一些字符串并期望数据库引擎将它们转换为日期时间值 这从一开始就注定要失败。 AddWithValue构建一个参数,其数据类型与传递的值相同,当然字符串参数无效用于搜索DateTime列。
你应该使用
cmd.Parameters.Add("@StartPeriod", DbType.Date).Value = DateTime.Parse(StartPeriod)
cmd.Parameters.Add("@EndPeriod", DbType.Date).Value = DateTime.Parse(EndPeriod)
当然,只有当您的表列是DateTime类型时,这才能正常工作。如果它们只是字符串,那么我们就会遇到完全不同的问题。您不应将日期时间值存储在字符串列中。您使用正确的数据类型,否则您将永远无法针对这些列编写正确的查询。
答案 1 :(得分:1)
你可以通过拼凑正确格式的日期时间字符串来完成此操作:
StartPeriod = "20170109"
EndPeriod = "20170115"
sql = @"Select CustomerNumber, Surname, Villa, Village, Suburb, BookedinDate,
BookedInOrder
FROM Customer
WHERE SUBSTR(BookedInDate,7) || SUBSTR(BookedInDate,4,2) ||
SUBSTR(BookedInDate,1,2) BETWEEN @StartPeriod AND @EndPeriod"
但您最好以适当的格式存储日期信息,例如YYYY-MM-DD
。