OracleCommand sembra convertire le date letterali
-
02-10-2019 - |
Domanda
Ho costruito un piccolo strumento di query per Oracle utilizzando OracleCommand e OracleDataAdapter. Utenti basta inserire una query full (senza parametri), eseguire ei risultati sono mostrati in una datagridview. Fin qui tutto bene, anche se ho provato una query non valida, per esempio:.
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
Questa query SQL non è valida per Oracle. Devi usare la funzione TO_DATE () da confrontare con data letterali. sviluppatore SQL respinge anche, ma in qualche modo il mio strumento di query funziona. Vuol dire che il mio OracleCommand è un po 'di un mago qui o sto facendo qualcosa di sbagliato? Inoltre è ci un modo per omettere questo comportamento perché lo scopo dello strumento sta testando le query, che dovrebbe funzionare sempre ...
Grazie
Soluzione
La query può essere valido per Oracle. Non è necessario utilizzare to_date()
se si dà la stringa di data in formato data la sessione, anche se è generalmente migliore per farlo che in ogni caso di problemi di evitare come questo.
Sembra che si dispone di un diverso NLS_DATE_FORMAT
nell'ambiente strumento a quello in SQL Developer, o il formato della data della sessione è stato impostato in modo implicito da OracleCommand.
È possibile select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
per vedere quello che è da SQL * Plus e SQL Developer, e dal vostro strumento; e da nls_database_parameters
per vedere quale è prevalente l'impostazione predefinita di database.
Sembra che il tuo strumento può avere DD-MON-RR
e ci si aspetta qualche altro formato altrove, ma senza controllare tali tabelle è difficile dire dove si sta utilizzando il default del database e dove si sta ignorando che a livello di sessione. Direi che è il default DB e anche se si dispone di un override nei tuoi altri ambienti.
Da SQL Developer, provare alter session set nls_date_format='DD-MON-RR';
e poi ri-eseguire la query non valida -. Dovrebbe funzionare anche lì