Dada a natureza de um tipo de dados de data / hora, ele não pode conter um null
valor, ou seja, precisa conter um valor, não pode ficar em branco ou conter nada. Se você marcar uma variável de data / hora como nullable
somente então, poderá atribuir um valor nulo a ela. Então, o que você está procurando fazer é uma das duas coisas (pode haver mais, mas só consigo pensar em duas):
Atribua um valor mínimo de data / hora à sua variável, se você não tiver um valor para ela. Você também pode atribuir um valor máximo de data / hora - da maneira que mais lhe convier. Apenas verifique se você é consistente em todo o site ao verificar seus valores de data / hora. Decida usar min
ou max
e ficar com ele.
Marque sua variável de data / hora como nullable
. Dessa forma, você pode definir sua variável de data / hora como null
se você não tiver uma variável.
Deixe-me demonstrar meu primeiro ponto usando um exemplo. O DateTime
tipo de variável não pode ser definido como nulo, ele precisa de um valor; neste caso, eu vou defini-lo como o DateTime
valor mínimo, se não houver valor.
Meu cenário é que eu tenho uma BlogPost
aula. Ele tem muitos campos / propriedades diferentes, mas eu escolhi apenas usar dois para este exemplo. DatePublished
é quando a postagem foi publicada no site e precisa conter um valor de data / hora. DateModified
é quando uma postagem é modificada, para que ela não precise conter um valor, mas pode conter um valor.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Usando ADO.NET
para obter os dados do banco de dados (atribuir DateTime.MinValue
se não há valor):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Você pode realizar meu segundo ponto, marcando o DateModified
campo como nullable
. Agora você pode configurá-lo como null
se não houver valor para ele:
public DateTime? DateModified { get; set; }
Usando ADO.NET
para obter os dados do banco de dados, será um pouco diferente da maneira como foi feito acima (atribuindo em null
vez 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 isso ajude a esclarecer qualquer confusão. Dado que minha resposta é cerca de 8 anos depois, você provavelmente já é um programador C # experiente :)