我有一个查询
OleDbCommand com = _
new OleDbCommand("select * from techs where actd0v between '" + _
TextBox1.Text + "' and '" + TextBox2.Text + "'" , con);
其中文本框1和2是我想要检索与这些日期相关的某些日期的指定日期。但是当我试图找到给定日期之间的数据时,它给了我一些不包括在它们之间的日期。是否需要指定任何模式以获取指定日期之间发生的所有日期。
我正在为我的项目使用ms access数据库。
答案 0 :(得分:1)
查询格式正确无误。但是:
请注意这里的SQL注入!您需要确保输入确实是一个日期,而不是像:
'; drop table users; --
你可以做的一件事是:
DateTime.Parse(TextBox1.Text)
并使用其中一种.To *方法,Access将找到一个令人满意的格式。或者从DateTime对象创建ODBC规范格式,该格式通常有效:
ODBC Canonical:yyyy-mm-dd hh:mm:ss.sss
这是一个很好的overview of Sql Injection你应该看看。它不是特定于Access的,但它确实很好地传达了这个概念。
答案 1 :(得分:0)
我猜测文本框中的文本不是OleDB日期的可识别格式。尝试使用“yyyy-MM-dd”格式。示例:2010-03-31。您可以在调试模式下运行应用程序并发布完整查询吗?
答案 2 :(得分:0)
除了SQL注入警告......我认为你信任你的用户。
在日期的任一侧加上数字标记(#)
OleDbCommand com = _
new OleDbCommand("select * from techs where actd0v between #" + _
TextBox1.Text + "# and #" + TextBox2.Text + "#" , con);
MS Access应该弄明白。
可能是“之间”是在日期的字符串表示而不是日期类型上完成的;这可以解释出界的结果。