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

C# OLEDB访问查询未找到具有日期时间条件的数据,c#,ms-access,oledb,C#,Ms Access,Oledb,因此,我遇到了一件非常奇怪的事情,我正在从C#应用程序查询Access DB。通过以下简单查询- OleDbDataReader externalAccessReader = null; OleDbCommand externalAccessCommand = accessDBFunctions.ExternalAccessCommand(LivedataExternalAccessConnection); externalAccessCommand.CommandTe

因此,我遇到了一件非常奇怪的事情,我正在从C#应用程序查询Access DB。通过以下简单查询-

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

    externalAccessCommand.CommandText = "SELECT * from MinuteDataWhole where CurrentDateTime > #12/10/2016 08:43:53# order by CurrentDateTime";
当我执行时,它返回零行-

所以我直接转到Access db表

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

我看不出我在做什么不同的事情,查询是完全相同的


有人能看到任何明显的东西吗?

此问题是由用于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中的字符串。

此问题是由OleDb MS Access提供程序的通用性造成的。它使用不变区域性,并要求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中的字符串。

将月份与日期反转。换句话说#2016年12月10日…#嗯,这在C应用程序中起了作用,但当我在access DB中运行它时,它就不起作用了。为什么它在C#中工作?但仍不了解OleDb提供程序的通用性质要求MS Access的格式。它使用不变的文化。当然,您当地的MS Access用户界面更了解每月和每天的情况。换句话说#2016年12月10日…#嗯,这在C应用程序中起了作用,但当我在access DB中运行它时,它就不起作用了。为什么它在C#中工作?但仍不了解OleDb提供程序的通用性质要求MS Access的格式。它使用不变的文化。当然,您的本地MS Access用户界面更了解这一点