Dada la naturaleza de un tipo de datos de fecha / hora, no puede contener un null
valor, es decir, debe contener un valor, no puede estar en blanco o no contener nada. Si marca una variable de fecha / hora como nullable
solo 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 min
o max
y quédate con él.
Marque su variable de fecha / hora como nullable
. De esta manera, puede establecer su variable de fecha / hora null
si no tiene una variable.
Permítanme demostrar mi primer punto usando un ejemplo. El DateTime
tipo de variable no se puede establecer en nulo, necesita un valor, en este caso voy a establecerlo en el DateTime
valor mínimo si no hay ningún valor.
Mi escenario es que tengo una BlogPost
clase. Tiene muchos campos / propiedades diferentes, pero elegí solo usar dos para este ejemplo. DatePublished
es cuando la publicación se publicó en el sitio web y debe contener un valor de fecha / hora. DateModified
es 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.NET
para obtener los datos de la base de datos (asignar DateTime.MinValue
es 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 DateModified
campo como nullable
. Ahora puede configurarlo null
si no tiene ningún valor:
public DateTime? DateModified { get; set; }
Utilizando ADO.NET
para obtener los datos de la base de datos, se verá un poco diferente a la forma en que se hizo anteriormente (asignando en null
lugar 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 # :)