パラメータ化されたクエリは、ネイティブの .Net DateTime オブジェクトを (たとえば) Enterprise Library に渡し、それが of であることを指定してDbType.DateTime
EL に心配させることができるため、良い出発点です。ただし、ELなどを使用しておらず、質問に投稿されているSQL文字列の使用に固執しているためにそれができない場合は、特にフォーマットに関して、Oracleが日付を内部でどのように扱うかを認識する必要があります。
SQL DeveloperまたはSQLPlusを使用して、次を実行します:
Select To_Char(sysdate) from Dual;
表示される形式は、To_Date を使用する場合に Oracle インスタンスが期待する日付の形式であり、Oracle が To_Char で使用する形式です。いずれかの呼び出しでその形式から逸脱すると、問題が発生します。ただし、使用されているデフォルトの形式に関係なく、呼び出しで指定することでオーバーライドできます。
Select To_Char(sysdate, 'YYYY/MM/DD HH:MI:SS') from Dual;
Select To_Date('2013/02/26 05:03:27', 'YYYY/MM/DD HH:MI:SS') from Dual;
NLS_DATE_FORMAT パラメータを設定することで、Oracle が暗黙的に使用するデフォルトを設定できます。
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH:MI:SS';
前のステートメントは、それが実行されるセッションのデフォルトのみを変更することに注意してください。Oracle システムでカスタム形式を使用し、ログオン後のトリガーを使用するすべてのセッションで確実に取得できるようにします。
create or replace TRIGGER NLS_Parameters_OnLogon AFTER LOGON ON SCHEMA BEGIN
-- This makes the database case insensitive for sorting and searching and sets the default date format for TO_CHAR and TO_DATE
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP=LINGUISTIC';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT=BINARY_CI';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY/MM/DD HH:MI:SS''';
End;
一部の Oracle 構成ファイルを編集することで、Oracle サーバー全体のデフォルトの日付形式を変更することができますが、制御できないクライアント サーバーに展開する必要があるため、代わりにこの方法を使用します。
この記事は、私が持っているのと同じ種類の根拠をカバーしていますが、例としてもう少し詳しく説明しています。