2009-08-29 6 views

risposta

12

Ci sono 3 approcci comuni qui;

  • se si sta parlando di object (forse come si prelevarla da un data-reader), quindi DBNull.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 come null; un numero magico, forse - ma funziona ed è supportato dalla maggior parte dei dati vincolanti ecc.
  • in .NET 2.0, Nullable<T> significa che è possibile utilizzare DateTime? - vale a dire un valore nullable of DateTime; usa semplicemente DateTime? dove vuoi dire uno DateTime che può essere nullo, e puoi dargli un valore di null o un valido DateTime.

Alcuni altri pensieri su di accesso ai dati e valori nulli:

  • caso di passaggio da un SqlCommand si must uso DBNull.Value, non null - 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; 
+0

Mark, grazie mille. – odiseh

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"]; 
} 
+0

Non riesco a trasmettere oggetto (una colonna di DataRow) a DateTime. – odiseh

+0

Risposta tramite modifica. Hai solo bisogno di controllare se è uguale a 'DBNull.Value'. –

+0

Oh ho trovato grazie. – odiseh

Problemi correlati