Dada la naturaleza de un tipo de datos de fecha / hora, no puede contener un nullvalor, es decir, debe contener un valor, no puede estar en blanco o no contener nada. Si marca una variable de fecha / hora como nullablesolo entonces puede asignarle un valor nulo. Entonces, lo que está buscando hacer es una de dos cosas (puede haber más, pero solo puedo pensar en dos):
Asigne un valor mínimo de fecha / hora a su variable si no tiene un valor para ella. También puede asignar un valor máximo de fecha / hora, de la forma que más le convenga. Solo asegúrese de ser consistente en todo el sitio cuando verifique sus valores de fecha / hora. Decide usar mino maxy quédate con él.
Marque su variable de fecha / hora como nullable. De esta manera, puede establecer su variable de fecha / hora nullsi no tiene una variable.
Permítanme demostrar mi primer punto usando un ejemplo. El DateTimetipo de variable no se puede establecer en nulo, necesita un valor, en este caso voy a establecerlo en el DateTimevalor mínimo si no hay ningún valor.
Mi escenario es que tengo una BlogPostclase. Tiene muchos campos / propiedades diferentes, pero elegí solo usar dos para este ejemplo. DatePublishedes cuando la publicación se publicó en el sitio web y debe contener un valor de fecha / hora. DateModifiedes cuando se modifica una publicación, por lo que no tiene que contener un valor, pero puede contener un valor.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Utilizando ADO.NETpara obtener los datos de la base de datos (asignar DateTime.MinValuees que no hay valor):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Puedes lograr mi segundo punto marcando el DateModifiedcampo como nullable. Ahora puede configurarlo nullsi no tiene ningún valor:
public DateTime? DateModified { get; set; }
Utilizando ADO.NETpara obtener los datos de la base de datos, se verá un poco diferente a la forma en que se hizo anteriormente (asignando en nulllugar de DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Espero que esto ayude a aclarar cualquier confusión. Dado que mi respuesta es aproximadamente 8 años después, probablemente ya seas un programador experto de C # :)