Étant donné la nature d'un type de données date / heure, il ne peut pas contenir de nullvaleur, c'est-à-dire qu'il doit contenir une valeur, il ne peut pas être vide ou ne rien contenir. Si vous marquez une variable date / heure comme nullablealors, vous pouvez lui attribuer une valeur nulle. Donc, ce que vous cherchez à faire est l'une des deux choses (il y en a peut-être plus mais je ne pense qu'à deux):
Attribuez une valeur de date / heure minimale à votre variable si vous n'en avez pas de valeur. Vous pouvez également attribuer une valeur de date / heure maximale, selon la manière qui vous convient. Assurez-vous simplement que vous êtes cohérent à l'échelle du site lorsque vous vérifiez vos valeurs de date / heure. Décidez d'utiliser minou maxet respectez-le.
Marquez votre variable date / heure comme nullable. De cette façon, vous pouvez définir votre variable date / heure nullsi vous ne disposez pas d'une variable.
Permettez-moi de démontrer mon premier point en utilisant un exemple. Le DateTimetype de variable ne peut pas être défini sur null, il a besoin d'une valeur, dans ce cas, je vais le définir à la DateTimevaleur minimale de s'il n'y a pas de valeur.
Mon scénario est que j'ai une BlogPostclasse. Il a de nombreux champs / propriétés différents mais j'ai choisi de n'en utiliser que deux pour cet exemple. DatePublishedcorrespond au moment où la publication a été publiée sur le site Web et doit contenir une valeur date / heure. DateModifiedc'est quand un article est modifié, il ne doit donc pas contenir de valeur, mais peut contenir une valeur.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Utilisation ADO.NETpour obtenir les données de la base de données (attribuer DateTime.MinValues'il n'y a pas de valeur):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Vous pouvez accomplir mon deuxième point en marquant le DateModifiedchamp comme nullable. Vous pouvez maintenant le définir nulls'il n'y a pas de valeur:
public DateTime? DateModified { get; set; }
En utilisant ADO.NETpour obtenir les données de la base de données, cela ressemblera un peu à la façon dont cela a été fait ci-dessus (en assignant nullau lieu de DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
J'espère que cela aide à dissiper toute confusion. Étant donné que ma réponse est d'environ 8 ans plus tard, vous êtes probablement un programmeur C # expert maintenant :)