2013-06-03 127 views
2

我想从我的数据库中获取记录,这是在ms访问中创建的2013年6月3日。日期都存储在DD/MM/YYYY的格式,下面是我的查询访问mdb日期/时间问题

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

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

回答

2

日期都存储在DD/MM/YYYY

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

但令人惊奇的

我不认为这是惊人的。我认为这是不必要地使用字符串转换的完美结果。他们几乎总是咬你。你不是想表示一个字符串 - 你想表示一个日期。所以尽可能使用这种类型。

您应该:

  • 使用参数化的SQL的原因是多方面的查询 - 最重要的是避免SQL注入攻击,但避免这种
  • 的不必要的字符串转换指定的参数值一个DateTime,从而避免了串转换

哪个供应商类型,你正在使用您还没有指定 - 我的猜测是OleDbConnection等等。通常,如果您查看相关命令类的Parameters属性的文档,您会发现一个合适的示例。例如,OleDbCommand.Parameters显示OleDbConnection上的参数化查询。有一两件事值得的文档指出:

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

+0

毫无疑问,我得到的最佳答案.... – greatmajestics