2016-10-13 2 views
0

정말 이상한 점이있어서 C# 응용 프로그램에서 Access DB를 쿼리하고 있습니다. 간단한 쿼리로 다음과 같이 -OLEDB 액세스 DateTime으로 데이터를 찾을 수없는 쿼리 조건

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

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

내가 실행, 제로 행을 반환 -

enter image description here

그래서 내가 액세스 DB 테이블에 직접 간을 ..

enter image description here

이 쿼리를 실행하고 데이터가 반환되었는지 확인하십시오. 내가 일을하고 있다고 다른 아무것도 볼 수 없습니다

enter image description here

는 쿼리가 정확히 동일합니다.

누구나 명백한 것을 볼 수 있습니까?

+1

달을 그날과 반전시킵니다. 다른 말로. # 10/12/2016 ..... # – Steve

+0

흠,이 C# 응용 프로그램에서 작동하지만 액세스 DB에서 실행할 때 그것은 않습니다. 왜 C#에서 작동합니까? 여전히 이해할 수 없음 – SK2017

+0

MS 액세스를위한 OleDb 공급자의 일반적인 특성에 필요한 서식입니다. 불변 문화를 사용합니다. 물론 로컬 MS 액세스 UI가 더 잘 알고 있습니다. – Steve

답변

3

이 문제는 MS-Access 용 OleDb 공급자의 일반적인 특성 때문에 발생합니다. Invariant Culture를 사용하며 DateTime 상수가 해당 형식이어야합니다. 물론 로컬 MS-Access UI는 더 잘 알고 있으며 사용자 입력 (기본적으로 문자열)을 Access (필요한 모든 것)에 필요한 올바른 기본 형식으로 변환합니다.

그러나 DateTime 변수를 DateTime 유형의 매개 변수로 전달하는 경우 날짜 시간에 문자열을 변환은 OleDb의 하위 레이어의 개입이 어떤 종류없이이기 때문에이 문제는

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; 

지금, 날짜 시간 변수가 전달 및 사용과 관련된 어떠한 형식도 없다 멀리 을 가야한다.