Biorąc pod uwagę charakter typu danych data / czas, nie może on zawierać null
wartości, tzn. Musi zawierać wartość, nie może być pusty ani niczego. Jeśli zaznaczysz zmienną daty / godziny jako taką, nullable
wó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 min
lub max
i trzymaj się tego.
Oznacz zmienną daty / godziny jako nullable
. W ten sposób możesz ustawić zmienną daty / godziny na, null
jeśli nie masz do niej zmiennej.
Pokażę pierwszy punkt na przykładzie. Typ DateTime
zmiennej nie może być ustawiony na null, potrzebuje wartości, w tym przypadku ustawię ją na DateTime
minimalną wartość, jeśli nie ma żadnej wartości.
Mój scenariusz jest taki, że mam BlogPost
zajęcia. Ma wiele różnych pól / właściwości, ale w tym przykładzie wybrałem tylko dwa. DatePublished
jest, gdy post został opublikowany na stronie internetowej i musi zawierać wartość daty / godziny. DateModified
ma 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.NET
do pobrania danych z bazy danych (przypisanie DateTime.MinValue
oznacza 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 DateModified
pole jako nullable
. Teraz możesz ustawić go, null
jeśli nie ma dla niego żadnej wartości:
public DateTime? DateModified { get; set; }
Przy ADO.NET
pobieraniu danych z bazy danych będzie wyglądać nieco inaczej niż powyżej (przypisywanie null
zamiast 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 # :)