2016-10-13 3 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-AccessのOleDbプロバイダーの一般的な性質によって必要な書式設定です。それは不変の文化を使用します。もちろん、あなたのローカルMS-Access UIはそれをよりよく知っています – Steve

答えて

3

この問題は、MS-Access用のOleDbプロバイダーの一般的な性質によって発生します。 Invariant Cultureを使用し、DateTime定数をその形式にする必要があります。もちろん、あなたのローカルMS-Access UIはそれをよく知っていて、入力(基本的に文字列)をAccess(それが何であれ)が必要とする正しい基本フォーマットに変換します。

ただし、DateTime型のパラメータとしてDateTime変数を渡すとこの問題は、今は日時の文字列を変換するために、OLEDBの下位レベル層からの介入の任意の種類ずにそのまま何のフォーマット関与、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; 

行く必要があります。

関連する問題