> =无法正常工作

时间:2016-12-31 08:36:18

标签: vb.net sqlite

在这行代码中:

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字符串中拾取的记录。

任何帮助将不胜感激 布拉德

2 个答案:

答案 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