Biorąc pod uwagę charakter typu danych data / czas, nie może on zawierać nullwartości, tzn. Musi zawierać wartość, nie może być pusty ani niczego. Jeśli zaznaczysz zmienną daty / godziny jako taką, nullablewówczas możesz przypisać do niej wartość zerową. Więc to, co chcesz zrobić, to jedna z dwóch rzeczy (może być więcej, ale mogę myśleć tylko o dwóch):
Przypisz minimalną wartość daty / godziny do swojej zmiennej, jeśli nie masz jej wartości. Możesz także przypisać maksymalną wartość daty / godziny - w dowolny sposób, który Ci odpowiada. Upewnij się tylko, że sprawdzasz wartości daty / godziny w całej witrynie. Zdecyduj się na użycie minlub maxi trzymaj się tego.
Oznacz zmienną daty / godziny jako nullable. W ten sposób możesz ustawić zmienną daty / godziny na, nulljeśli nie masz do niej zmiennej.
Pokażę pierwszy punkt na przykładzie. Typ DateTimezmiennej nie może być ustawiony na null, potrzebuje wartości, w tym przypadku ustawię ją na DateTimeminimalną wartość, jeśli nie ma żadnej wartości.
Mój scenariusz jest taki, że mam BlogPostzajęcia. Ma wiele różnych pól / właściwości, ale w tym przykładzie wybrałem tylko dwa. DatePublishedjest, gdy post został opublikowany na stronie internetowej i musi zawierać wartość daty / godziny. DateModifiedma miejsce, gdy wpis jest modyfikowany, więc nie musi zawierać wartości, ale może zawierać wartość.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Użycie ADO.NETdo pobrania danych z bazy danych (przypisanie DateTime.MinValueoznacza brak wartości):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Mój drugi punkt możesz osiągnąć, zaznaczając DateModifiedpole jako nullable. Teraz możesz ustawić go, nulljeśli nie ma dla niego żadnej wartości:
public DateTime? DateModified { get; set; }
Przy ADO.NETpobieraniu danych z bazy danych będzie wyglądać nieco inaczej niż powyżej (przypisywanie nullzamiast DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Mam nadzieję, że pomoże to wyjaśnić wszelkie nieporozumienia. Biorąc pod uwagę, że moja odpowiedź jest około 8 lat później, prawdopodobnie jesteś już programistą C # :)