我正在尝试从我的数据库中获取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。这是微软的错误吗?请帮忙
答案 0 :(得分:2)
日期以dd / MM / yyyy
的格式存储
我怀疑他们不是。我怀疑它们以某种原生日期/时间格式存储,这无疑比10个字符的字符串更有效。 (例如,我假设您正在使用适当的字段类型而不是varchar。)区分数据的固有性质和“转换为文本时如何显示”非常重要。
但令人惊奇的事情
我不认为这太棒了。我认为这是不必要地使用字符串转换的完美自然结果。他们最终总是咬你。你不是要代表一个字符串 - 你试图代表一个日期。所以尽可能使用那种类型。
你应该:
DateTime
,从而避免字符串转换您尚未指定您正在使用的提供程序类型 - 我的猜测是OleDbConnection
等。通常,如果您查看相关命令类的Parameters
属性的文档,您将会找一个合适的例子。例如,OleDbCommand.Parameters
在OleDbConnection
上显示参数化查询。值得注意的是文档:
当
OleDbCommand
设置为CommandType
时,OLE DB .NET提供程序不支持将参数传递给SQL语句或Text
调用的存储过程的命名参数。在这种情况下,必须使用问号(?
)占位符。 [...] 因此,OleDbParameter
对象添加到OleDbParameterCollection
的顺序必须直接对应于命令文本中参数的问号占位符的位置。