Учитывая природу типа данных даты / времени, он не может содержать null
значение, то есть он должен содержать значение, он не может быть пустым или ничего не содержать. Если вы помечаете переменную даты / времени как nullable
только тогда, вы можете присвоить ей нулевое значение. Итак, что вы хотите сделать, это одна из двух вещей (может быть больше, но я могу думать только о двух):
Назначьте минимальное значение даты / времени для вашей переменной, если у вас нет значения для нее. Вы также можете назначить максимальное значение даты / времени - в зависимости от того, что вам подходит. Просто убедитесь, что вы едины для всего сайта при проверке значений даты / времени. Определитесь с использованием min
или max
и придерживайтесь его.
Пометьте свою переменную даты / времени как nullable
. Таким образом, вы можете установить переменную даты / времени, null
если у вас нет этой переменной.
Позвольте мне продемонстрировать мой первый пункт на примере. Тип DateTime
переменной не может быть установлен в нуль, ему нужно значение, в этом случае я собираюсь установить его на DateTime
минимальное значение, если значение отсутствует.
Мой сценарий таков, что у меня есть BlogPost
класс. У него много разных полей / свойств, но я выбрал только два для этого примера. DatePublished
когда сообщение было опубликовано на веб-сайте и должно содержать значение даты / времени. DateModified
это когда сообщение модифицируется, поэтому оно не должно содержать значение, но может содержать значение.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Использование ADO.NET
для получения данных из базы данных (назначить DateTime.MinValue
, если значение отсутствует):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Вы можете выполнить мой второй пункт, пометив DateModified
поле как nullable
. Теперь вы можете установить его, null
если для него нет значения:
public DateTime? DateModified { get; set; }
Использование ADO.NET
для получения данных из базы данных, это будет выглядеть немного иначе, чем это было сделано выше (назначение null
вместо DateTime.MinValue
):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Я надеюсь, что это поможет прояснить ситуацию. Учитывая, что мой ответ через 8 лет, вы, вероятно, уже являетесь опытным программистом C # :)