Data la natura di un tipo di dati data / ora, non può contenere un nullvalore, ovvero deve contenere un valore, non può essere vuoto o contenere nulla. Se si contrassegna una variabile data / ora come nullablesolo 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 mino maxe mantienilo.
Contrassegna la tua variabile data / ora come nullable. In questo modo è possibile impostare la variabile data / ora su nullse non si dispone di una variabile.
Vorrei dimostrare il mio primo punto usando un esempio. Il DateTimetipo di variabile non può essere impostato su null, ha bisogno di un valore, in questo caso lo imposterò sul DateTimevalore minimo se non c'è alcun valore.
Il mio scenario è che ho una BlogPostlezione. 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.NETper ottenere i dati dal database (assegnare DateTime.MinValuese 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 DateModifiedcampo come nullable. Ora puoi impostarlo su nullse non c'è valore per esso:
public DateTime? DateModified { get; set; }
Usando ADO.NETper ottenere i dati dal database, sembrerà un po 'diverso dal modo in cui è stato fatto sopra (assegnando nullinvece 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 # :)