我正在尝试查询.mdb数据库,这是VB.Net中SQL的一部分:
sql = sql + "WHERE datdatum BETWEEN #" & "15-10-2018" & "# And #" & "31-10-2018" & "#"
Run Code Online (Sandbox Code Playgroud)
where子句按照您的方式工作.目前我将第一个日期更改15-10-2018为01-10-2018,它显示所有记录Jan-10而不是Oct-01.
这里有两个问题.
首先,不要那样格式化日期.用于SQL的日期应始终使用ISO8601格式.对于没有时间分量的仅限日期的值,有一些理由偏爱标准格式的鲜为人知的未分离变体,但仍然是ISO8601.所以日期值应如下所示:
sql = sql + "WHERE datdatum BETWEEN #" & "20181015" & "# And #" & "20181031" & "#"
Run Code Online (Sandbox Code Playgroud)
或这个:
sql = sql + "WHERE datdatum BETWEEN #" & "2018-10-15" & "# And #" & "2018-10-31" & "#"
Run Code Online (Sandbox Code Playgroud)
其他任何东西只是在你的问题中乞求那种问题,其中从字符串中读取的实际日期根据进行解释的人/设备的文化而变化.
这个解决方案似乎可以自行解决,但由于第二个问题,我们仍需要做更多的工作:
不要使用字符串连接将数据输入SQL查询!
您应该始终更像这样构建查询:
sql = sql + " WHERE datdatum BETWEEN ? And ?"
Run Code Online (Sandbox Code Playgroud)
只要没有使用数据(例如日期值),连接就可以了.然后你填充这样的值(假设你有一个OleDbCommand名为的对象cmd):
cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.Parse("2018-10-15")
cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.Parse("2018-10-31")
Run Code Online (Sandbox Code Playgroud)
这完全避免了问题的格式问题,因为您正在使用.Net DateTime值.它有时可以运行得更快(尽管它可能对Access无关紧要).它可以防止恶意和良性的SQL注入问题.IMO其他任何东西都是业余的,并且与专业的医疗事故接壤.
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |