Aufgrund der Art eines Datums- / Uhrzeitdatentyps kann er keinen nullWert enthalten , dh er muss einen Wert enthalten, er darf nicht leer sein oder nichts enthalten. Wenn Sie eine Datums- / Zeitvariable als markieren, nullablekönnen Sie ihr nur einen Nullwert zuweisen. Was Sie also tun möchten, ist eines von zwei Dingen (es könnte mehr geben, aber ich kann nur an zwei denken):
Weisen Sie Ihrer Variablen einen Mindestwert für Datum und Uhrzeit zu, wenn Sie keinen Wert dafür haben. Sie können auch einen maximalen Datums- / Zeitwert zuweisen - je nachdem, wie es Ihnen passt. Stellen Sie einfach sicher, dass Sie auf der gesamten Website konsistent sind, wenn Sie Ihre Datums- / Zeitwerte überprüfen. Entscheide dich für minoder maxund bleibe dabei.
Markieren Sie Ihre Datums- / Zeitvariable als nullable. Auf diese Weise können Sie Ihre Datums- / Zeitvariable auf einstellen, nullwenn Sie keine Variable haben.
Lassen Sie mich meinen ersten Punkt anhand eines Beispiels demonstrieren. Der DateTimeVariablentyp kann nicht auf null gesetzt werden, er benötigt einen Wert. In diesem Fall setze ich ihn auf denDateTime Mindestwert setzen, wenn kein Wert vorhanden ist.
Mein Szenario ist, dass ich eine BlogPostKlasse habe. Es hat viele verschiedene Felder / Eigenschaften, aber ich habe nur zwei für dieses Beispiel verwendet. DatePublishedDies ist der Zeitpunkt, an dem der Beitrag auf der Website veröffentlicht wurde und einen Datums- / Zeitwert enthalten muss. DateModifiedWenn ein Beitrag geändert wird, muss er keinen Wert enthalten, kann aber einen Wert enthalten.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Verwenden ADO.NET, um die Daten aus der Datenbank abzurufen (zuweisen, DateTime.MinValuedass kein Wert vorhanden ist):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Sie können meinen zweiten Punkt erreichen, indem Sie das DateModifiedFeld als markieren nullable. Jetzt können Sie festlegen, nullob kein Wert dafür vorhanden ist:
public DateTime? DateModified { get; set; }
Wenn ADO.NETSie die Daten aus der Datenbank abrufen, sieht sie etwas anders aus als oben (Zuweisen nullstatt DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Ich hoffe, dies hilft, Verwirrung zu beseitigen. Da meine Antwort ungefähr 8 Jahre später ist, sind Sie wahrscheinlich inzwischen ein erfahrener C # -Programmierer :)