OLEDB 访问查询找不到具有日期时间条件的数据

OLEDB Access Query not finding data with DateTime Criteria

所以,我遇到了一些非常奇怪的事情,我正在从 C# 应用程序查询 Access 数据库。用一个简单的查询如下 -

    OleDbDataReader externalAccessReader = null;
    OleDbCommand externalAccessCommand = accessDBFunctions.ExternalAccessCommand(LivedataExternalAccessConnection);

    externalAccessCommand.CommandText = "SELECT * from MinuteDataWhole where CurrentDateTime > #12/10/2016 08:43:53# order by CurrentDateTime";

当我执行时,它 returns 零行 -

所以我直接进入了Access数据库table..

运行这个查询,果然返回了数据

我看不出我所做的有什么不同,查询完全相同。

有人能看出明显的东西吗?

此问题是由 MS-Access 的 OleDb 提供程序的通用性质引起的。它使用不变文化并要求 DateTime 常量采用该格式。当然,您本地的 MS-Access UI 更了解它,并将您的输入(基本上是字符串)转换为 Access 所需的正确基础格式(无论它是什么)

但是,如果您将 DateTime 变量作为 DateTime 类型的参数传递,这个问题应该会消失

OleDbDataReader externalAccessReader = null;
OleDbCommand externalAccessCommand = accessDBFunctions.ExternalAccessCommand(LivedataExternalAccessConnection);

externalAccessCommand.CommandText = @"SELECT * from MinuteDataWhole 
    where CurrentDateTime > @currentDate 
    order by CurrentDateTime";
externalAccessCommand.Parameters.Add("@currentDate", OleDbType.Date).Value = DateTime.Now;

现在不涉及格式化,传递和使用 DateTime 变量,按原样无需 OleDb 下层的任何类型的干预来转换 DateTime 中的字符串.