3 messaggi dal 24 maggio 2006
Salve a tutti, provo ad illustrarvi il problema. Sto sviluppando del codice dove viene interrogato un database SqlServer 2014 STD, attraverso una query in SQL diretto (senza ORM), quindi attraverso una DbConnection e DbCommand. Ho poi creato un DbDataReader che vorrei riempire con il comando DbCommand.ExecuteReader().
Il problema è che eseguendo il codice in debug, il data reader risulta sempre vuoto, come se la query non restituisse nessun risultato, se invece eseguo la stessa query su Sql Management Studio, la query restituisce risultati.
Ho notato che a creare il problema è una where su due campi DATA, ma specifico che nella query ho impostato i parametri, passandoli come tipo System.Data.DbType.Date

Come posso impostare correttamente la where sulle date?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
per fare una prima verifica, prova ad inviare la query senza WHERE e, in caso i record fossero molti, metti un TOP 10 per limitare i risultati. Riesci a leggere correttamente i valori attraverso il DbDataReader?
Se sì, vuol dire che il tuo codice è corretto e che la causa del problema va ricercata nei parametri della clausola WHERE.


ma specifico che nella query ho impostato i parametri, passandoli come tipo System.Data.DbType.Date

Il tipo del parametro è ok ma ho l'impressione che tu stia passando come valore una stringa. Es. se passi la stringa "12/5/2018", potrebbe esserti interpretata come 5 dicembre 2018, cioè con il formato anglosassone. Quindi, devi per prima cosa fare il parsing della stringa secondo la culture italiana, in modo che diventi un DateTime.
string dataStringa = "12/5/2018";
DateTime dataParsata = DateTime.Parse(dataStringa, CultureInfo.GetCultureInfo("it-IT"));


e poi passi la variabile dataParsata come valore del parametro.

ciao,
Moreno
Modificato da BrightSoul il 16 maggio 2018 14.08 -

Enjoy learning and just keep making
3 messaggi dal 24 maggio 2006
BrightSoul ha scritto:
Ciao,
per fare una prima verifica, prova ad inviare la query senza WHERE e, in caso i record fossero molti, metti un TOP 10 per limitare i risultati. Riesci a leggere correttamente i valori attraverso il DbDataReader?
Se sì, vuol dire che il tuo codice è corretto e che la causa del problema va ricercata nei parametri della clausola WHERE.


ma specifico che nella query ho impostato i parametri, passandoli come tipo System.Data.DbType.Date

Il tipo del parametro è ok ma ho l'impressione che tu stia passando come valore una stringa. Es. se passi la stringa "12/5/2018", potrebbe esserti interpretata come 5 dicembre 2018, cioè con il formato anglosassone. Quindi, devi per prima cosa fare il parsing della stringa secondo la culture italiana, in modo che diventi un DateTime.
string dataStringa = "12/5/2018";
DateTime dataParsata = DateTime.Parse(dataStringa, CultureInfo.GetCultureInfo("it-IT"));


e poi passi la variabile dataParsata come valore del parametro.

ciao,
Moreno
Modificato da BrightSoul il 16 maggio 2018 14.08 -


Ciao Moreno,
in realtà tentativi già fatti. Ho modificato la query togliendo il confronto delle date dal where, e i record ci sono, quindi il datareader viene riempito. Non passo i parametri come stringa, ma variabile di tipo DateTime.

Ho provato anche a forzare il DB, togliendo i parametri e mettendo in chiaro una clausula nel formato FORMAT(CAMPODATA, 'yyyyMMdd')>='20180101'
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Non passo i parametri come stringa, ma variabile di tipo DateTime.

Ok, hai verificato che quegli oggetti DateTime siano corretti? Se la data arriva da un form, a un certo punto deve essersi verificata una conversione da stringa a DateTime. Magari l'ha fatta il modelbinder di MVC ma comunque dovresti mettere un breakpoint e andare in debug per verificare che quell'oggetto DateTime sia corretto.


Ho provato anche a forzare il DB, togliendo i parametri e mettendo in chiaro una clausula nel formato FORMAT(CAMPODATA, 'yyyyMMdd')>='20180101'

Ok, questa query senza parametri deve senz'altro restituire lo stesso risultato di quello che otterresti dal Management Studio. Il SqlCommand non apporta nessuna modifica alla query né ai risultati.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.