Come potremmo gestire null per un campo datetime (ottenuto da SQL Server) nel nostro programma in C#?Come gestire null per un campo data/ora allow-null (DB) nel nostro programma?
6
A
risposta
12
Ci sono 3 approcci comuni qui;
- se si sta parlando di
object
(forse come si prelevarla da un data-reader), quindiDBNull.Value
può rappresentare nulla. Non tendo a escludere questo livello di dati, sebbene - a causa della cronologia .NET 1.1,
DateTime.MinValue
viene comunemente interpretato comenull
; un numero magico, forse - ma funziona ed è supportato dalla maggior parte dei dati vincolanti ecc. - in .NET 2.0,
Nullable<T>
significa che è possibile utilizzareDateTime?
- vale a dire un valore nullable of DateTime; usa semplicementeDateTime?
dove vuoi dire unoDateTime
che può essere nullo, e puoi dargli un valore dinull
o un validoDateTime
.
Alcuni altri pensieri su di accesso ai dati e valori nulli:
- caso di passaggio da un
SqlCommand
si must usoDBNull.Value
, nonnull
- vedi sotto - durante la lettura da un data-reader, Tendo a controllare
reader.IsDbNull(ordinal)
roba di comando (con Nullable<T>
come esempio):
param.Value = when.HasValue ? (object)when.Value : DBNull.Value;
3
Usa DateTime?
Che problema riscontrato, nello specifico?
- Modifica
Solo così è chiaro, questo è un Nullable
DateTime oggetto, non una domanda :)
DateTime? t = null;
- modifica
Rispondendo a commentare, controllare in questo modo:
DateTime? theTime;
if(table["TheColumn"] == DBNull.Value){
theTime = null;
} else {
theTime = (DateTime) table["TheColumn"];
}
Mark, grazie mille. – odiseh