我想按日期从ms访问数据库中搜索记录。我已经将日期存储在ms访问表中;2020年8月23日下午5:31:21";。我遇到语法错误。我该怎么做?
Dim x As Date = DateTimePicker1.Value
Dim command As New OleDbCommand("select col1,col2,col3 where table1.datetime = @datetime", connection)
command.Parameters.AddWithValue("@datetime", x.ToString("mm/dd/yy"))
Pete-S-建议的代码
及其工作。
在这篇文章中,我已经将ms访问中的数据类型更改为shortdate
Dim x As Date = DateTimePicker1.Value
Dim command As New OleDbCommand("select col1,col2,col3 From table1 where ([datetime] >= @startDate And [datetime] <= @endDate)", connection)
Dim dateParameter As OleDbParameter = command.Parameters.Add(New OleDbParameter("@startDate", OleDbType.Date))
dateParameter.Value = x.Date
dateParameter = command.Parameters.Add(New OleDbParameter("@endDate", OleDbType.Date))
dateParameter.Value = DateAdd(DateInterval.Day,1,x.Date)
@Steve指出了时间问题,当搜索包含时间和日期的日期时,一个解决方案是搜索一天的整个范围:
选项1:table1.datetime>='8/23/20'和table1.datetime<'8/24/20'
Dim command As New OleDbCommand("select col1,col2,col3 From table1 where ([datetime] >= @startDate And [datetime] < @endDate)", connection)
command.Parameters.AddWithValue("@startDate", x.Date)
command.Parameters.AddWithValue("@endDate", DateAdd(DateInterval.Day,1,x.Date))
添加参数的首选方法,在添加参数时明确设置数据类型:
Dim dateParameter As OleDbParameter = command.Parameters.Add(New OleDbParameter("@startDate", OleDbType.Date))
dateParameter.Value = x.Date
dateParameter = command.Parameters.Add(New OleDbParameter("@endDate", OleDbType.Date))
dateParameter.Value = DateAdd(DateInterval.Day,1,x.Date)
如果x = 8/23/2020
,则执行的SQL将是select col1,col2,col3 From table1 where (table1.datetime >= '8/23/20' And table1.datetime < '8/24/20')
这将包括2020年8月23日00:00:00至23:59:59之间的所有时间…(第二天之前(。如果未指定时间,则假定为00:00:00。这就是为什么在搜索时,平等和时间并没有像你认为的那样发挥出来。
选项2:table1.datetime>='8/23/20'和table1.datetime<='8/23/20 23:59:59'将时间明确添加到搜索值中。这将在99.99%的时间内起作用,除非存储的值的时间戳在23:59.59.0001和00:00:00.00000之间,可以过滤掉。