Salve,
In una mia piccola WebApp che utilizza .NET 2.0 ho deciso di utilizzare SQlite3.
Devo dire che fin da subito mi sono scontrato con la gestione delle date. Adesso sono riuscito a sistemare tutte le INSERT ed UPDATE. Rimane adesso un problema relativo alla lettura di campi data che contengono un valore NULL.
La seguente istruzione restituisce un errore di parsing:

If IsDBNull(rsx("MiaData")) Then

Dice che la stringa non contiene un formato data valido

?!?

Qual'è il giusto approccio alle date con SQlite3 in pagine ASP.NET (nello specifico io uso vb.NET) ? Potete indicarmi qualche guida o tutorial in merito ?

Grazie a tutti
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
rsx che cos'è? Di che tipo di oggetto si tratta? Mostra il codice con cui leggi i record dal database SQLite.

Può darsi che l'errore sia sollevato da rsx, nel tentantivo di andare a leggere il valore come data (mentre invece trova null).

sanghino ha scritto:

sono riuscito a sistemare tutte le INSERT ed UPDATE

Dovresti sempre usare i parametri in tutti i tuoi comandi di aggiornamento, siano essi INSERT, UPDATE o DELETE. Qui trovi un esempio di come usare i parametri. Scorri fino in fondo e osserva le funzioni insertStudent, updateStudent e deleteStudent.
http://euwern.com/?p=980

In quel modo è molto semplice lavorare con le date, perché non devi preoccuparti di convertirle a stringa. Semplicemente, le dai in pasto al SQLiteParameter e si occuperà lui di formattarle nell'esatto formato gradito a SQLite.

ciao,
Moreno
Modificato da BrightSoul il 01 marzo 2014 12.53 -

Enjoy learning and just keep making
Intanto grazie per la risposta.

Purtroppo il problema è più insistente in lettura. Dopo aver fatto la select se vado a verificare un campo data se contiene un valore null viene risposto che la stringa è in un formato non convertibile in data.

Per quanto concerne le insert (e anche update) ho trovato che è necessario utilizzare le funzioni di SQlite per la gestione delle date. Ad esempio:

INSERT INTO table (id, miaData) VALUES (1, date('2014-03-01'))

funziona in maniera egregia. In pratica la cosa migliore sembra essere quella di usare la data come fosse una stringa per poi demandare a SQlite e alle sue funzioni l'onere della trasformazione. Per quel valore null ancora ci sto lavorando.

Grazie ancora
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego.
ho fatto un test e sono riuscito a riprodurre il tuo problema.

sanghino ha scritto:

la stringa è in un formato non convertibile in data.

Questo è un errore lanciato dal DataReader quando trova una stringa che non è interpretabile né come data né come null.
Questo problema esiste perché il campo DATE/DATETIME di SQLite non è un vero e proprio campo data, ma un comune campo di testo in cui puoi inserire una stringa qualsiasi.

Quindi sospetto che il tuo campo non contenga un valore null, ma la stringa 'null' o altra stringa.

Ho verificato che questa linea di codice funziona fintanto che il campo contiene solo stringhe interpretabili come date oppure null.
Dim dataora as String
'Questo funziona se CampoDataOra contiene una data o null
If IsDBNull(reader("CampoDataOra")) Then
    dataora = "Null"
Else
    dataora = reader("CampoDataOra").ToString()
End If


Invece, nel caso in cui io inserisca una stringa non valida, allora verrà fuori l'errore.
'Inserisco la stringa 'null' nel CampoDataOra.
'SQLite mi permette di farlo ma sto sbagliando
cmd.CommandText = "INSERT INTO tabella (Id, CampoDataOra) VALUES (1, 'null')"
cmd.ExecuteNonQuery()
'Ora lo rileggo
cmd.CommandText = "SELECT CampoDataOra FROM tabella WHERE Id=1"
'Qui ho un errore perché la stringa 'null' non è interpretabile né come null né come data
Dim dataOra = cmd.ExecuteScalar()

Se voglio inserire un null vero e proprio, lo devo scrivere senza apici
'Questo comando inserirà un valore null nel CampoDataOra
cmd.CommandText = "INSERT INTO tabella (Id, CampoDataOra) VALUES (1, null)"
cmd.ExecuteNonQuery()


Controlla la tua tabella per la presenza di stringhe non valide in quel campo.

ciao e buona domenica!
Modificato da BrightSoul il 02 marzo 2014 11.10 -

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.