访问mdb日期/时间问题

时间:2013-06-03 18:22:35

标签: c# ms-access

我正在尝试从我的数据库中获取2013年6月3日的记录,该数据库是以ms访问方式进行的。日期以dd / MM / yyyy的格式存储,下面是我的查询

AND (a.Date = #" + date + "#) ) order by e.E_ID asc

但令人惊奇的是,我已经在2013年3月3日的日期插入了一条记录,这是今天的日期,而它需要它作为2013年3月6日,我已经纠正了我的区域设置,仍然是同样的问题。另外在我的查询中我查询匹配日期我正在使用dd / MM / yyyy。这是微软的错误吗?请帮忙

1 个答案:

答案 0 :(得分:2)

  

日期以dd / MM / yyyy

的格式存储

我怀疑他们不是。我怀疑它们以某种原生日期/时间格式存储,这无疑比10个字符的字符串更有效。 (例如,我假设您正在使用适当的字段类型而不是varchar。)区分数据的固有性质和“转换为文本时如何显示”非常重要。

  

但令人惊奇的事情

我不认为这太棒了。我认为这是不必要地使用字符串转换的完美自然结果。他们最终总是咬你。你不是要代表一个字符串 - 你试图代表一个日期。所以尽可能使用那种类型。

你应该:

  • 出于多种原因使用参数化SQL进行查询 - 最重要的是避免SQL注入攻击,但以避免此类不必要的字符串转换
  • 将参数值指定为DateTime,从而避免字符串转换

您尚未指定您正在使用的提供程序类型 - 我的猜测是OleDbConnection等。通常,如果您查看相关命令类的Parameters属性的文档,您将会找一个合适的例子。例如,OleDbCommand.ParametersOleDbConnection上显示参数化查询。值得注意的是文档:

  

OleDbCommand设置为CommandType时,OLE DB .NET提供程序不支持将参数传递给SQL语句或Text调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。 [...]   因此,OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置。