Data la natura di un tipo di dati data / ora, non può contenere un null
valore, ovvero deve contenere un valore, non può essere vuoto o contenere nulla. Se si contrassegna una variabile data / ora come nullable
solo allora è possibile assegnare un valore null ad essa. Quindi quello che stai cercando di fare è una delle due cose (potrebbe essercene di più ma posso solo pensare a due):
Assegna un valore data / ora minimo alla tua variabile se non ne hai un valore. Puoi anche assegnare un valore di data / ora massimo, a seconda del modo che preferisci. Assicurati solo di essere coerente in tutto il sito quando controlli i valori di data / ora. Decidi di usare min
o max
e mantienilo.
Contrassegna la tua variabile data / ora come nullable
. In questo modo è possibile impostare la variabile data / ora su null
se non si dispone di una variabile.
Vorrei dimostrare il mio primo punto usando un esempio. Il DateTime
tipo di variabile non può essere impostato su null, ha bisogno di un valore, in questo caso lo imposterò sul DateTime
valore minimo se non c'è alcun valore.
Il mio scenario è che ho una BlogPost
lezione. Ha molti campi / proprietà diversi ma ho scelto di usarne solo due per questo esempio. DatePublished
è quando il post è stato pubblicato sul sito Web e deve contenere un valore data / ora. DateModified
è quando un post viene modificato, quindi non deve contenere un valore, ma può contenere un valore.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Utilizzo ADO.NET
per ottenere i dati dal database (assegnare DateTime.MinValue
se non c'è valore):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Puoi realizzare il mio secondo punto contrassegnando il DateModified
campo come nullable
. Ora puoi impostarlo su null
se non c'è valore per esso:
public DateTime? DateModified { get; set; }
Usando ADO.NET
per ottenere i dati dal database, sembrerà un po 'diverso dal modo in cui è stato fatto sopra (assegnando null
invece di DateTime.MinValue
):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Spero che questo aiuti a chiarire qualsiasi confusione. Dato che la mia risposta è circa 8 anni dopo, probabilmente ora sei un programmatore esperto C # :)