Учитывая тип данных типа дата / время, он не может содержать значение 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 #:)