6
votes

Quel est le moyen standard de gérer les dates nulles dans .NET

J'ai le formulaire ASP.NET avec C #, où est-ce que je prends les informations de l'utilisateur pour insérer dans la base de données comme d'habitude à l'aide de LINQ. bien. Où, comme je prends la date de naissance également de l'utilisateur, mais si l'utilisateur saute pour remplir la zone de texte de la date d'interface utilisateur, alors je reçois une date de type '01 / 01/0001 'quelque chose comme ceci, ce qui ne permettrait certainement pas de le ranger.

Donc, j'ai besoin de vérifier quelque part dans mon code que c'est NULL ou dans ce format (ci-dessus). Si c'est NULL ou en format '01 / 01/0001 ', qu'est-ce que je dois faire exactement? Je n'ai pas de valeur par défaut Valeur des dates.

Alors, quel est le moyen standard de gérer si la date est null (mais pas obligatoire). Veuillez me guider. Tant de fois, je me suis retrouvé dans le piège tout en manipulant nul pour différents types.

édité Voyez ce que j'ai fait l'air de travailler ici. Mais je ne pense pas que cela soit de manière standard: xxx

s'il vous plaît confirmer moi est-ce bon chemin?


6 commentaires

Je peux tout simplement dire datetime? dt = null;


Non Supposons que j'ai utilisé ici DateTime pas DateTime?


C'est assez ancien DateTetime juste un joker '?' est ajouté pour le rendre nullable, c'est-à-dire accepter des valeurs nulles.


Bonjour .... Je ne pouvais pas avoir de réponse ici


ok bu alors comment changer ce format de date "Jocker ''s"? Je veux ce format dans le formulaire DD-MMM-YYY. Où si j'essayais de faire comme cette datedre? dt = datevalue! = NULL? COVERT.TODATIONTÉTIME (DATEVALUE.TOSTRING ("DD-MMM-YYYY")): NULL; qui n'est pas wprking


Voir ma réponse mise à jour. Pourrait-il vous aider.


7 Réponses :


-2
votes

Vous pouvez l'utiliser en passant à la base de données.

object datetimeObj = null;
if (datetimefromUI == DateTime.MinValue) // This is put in the DateTime object by default
    datetimeObj = DBNull.Value;
else
    datetimeObj = datetimefromUI;

// Post datetimeObj to parameter in database...


1 commentaires

C # a des nullables, ils doivent être utilisés à la place.



13
votes

Faire la date de la date nullable (c'est-à-dire un " datetime? ") devrait permettre de le laisser réellement nul si l'utilisateur ne l'a pas défini. (Et à condition que votre colonne de base de données permettrait aux nuls, il peut être stocké comme NULL dans la base de données)

Sinon, il va à défaut à datetime.minvalue C'est ce que vous voyez ici. Et vous aurez à l'essai d'explicitement pour datetime.minvalue lors de l'ajout à la base de données.


0 commentaires

0
votes

DateTime est un type de valeur (comme un numéro), de sorte que vous ne pouvez pas assurer une valeur nulle. MANE Les gens utilisent à la fois DateTime.Minvalue ou DateTime.MaxValue, mais je préfère utiliser des types nullables:

DateTime? nullableDate;
dateSample.Value = null;


3 commentaires

Mais comme j'ai essayé d'attribuer une valeur null à la date, je reçois une exception comme suit: Type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre «System.DateTime» et '' Pourquoi cela devrait-il?


Voir cette ligne: DateTime? dt = convert.todatetime (Dob)! = DateTime.Minvalue? Convert.todateTetime (DOB): null; Est-ce bon code ou faux?


Je pense que le problème est dans votre phrase conditionnelle. Essayez une vérification conventionnelle si elle est conditionnelle si une conversion en DateTime? est nécessaire.



0
votes

Vous avez la possibilité d'utiliser nullable (alias datetime? ). Cela vous permet de gérer la date comme null tout au long de votre application.

Cependant, personnellement, je ne suis pas trouvé de nullables et préférerais ce second chemin: vous pouvez utiliser datetime.minvalue (qui est 01/01/0001) comme une constante significative dans votre application et La vérification de DateTime.Minvalue dans votre couche d'accès aux données.

La base de données, s'il s'agit d'un serveur SQL et que le champ est de type SmallDateTime, déborderait et lancez une exception si vous avez essayé d'enregistrer datetime.minvalue . Null cependant, pourrait bien être stocké dans la base de données pour tout type.

C'est ainsi que vous pouvez analyser vos chaînes dans des types nullables: xxx

avec utilisation : xxx


3 commentaires

Mais comme j'ai essayé d'attribuer une valeur null à la date, je reçois une exception comme suit: Type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre «System.DateTime» et '' Pourquoi cela devrait-il? Voir cette ligne: DateTime? dt = convert.todatetime (Dob)! = DateTime.Minvalue? Convert.todateTetime (DOB): null; Est-ce bon code ou faux?


Comme DateTime est un type de valeur il ne peut pas être nul. Par conséquent, vous ne pouvez pas la méthode convert.todatetime () et null dans une expression conditionnelle. Qu'est-ce que DOB dans ce cas? Un string?


Oui, DOB est une chaîne. Si je ne peux pas faire d'Abouve expliquée, quelle est la normale pour la même chose? Toute référence de code



0
votes

Vous pouvez faire quelque chose comme celui-ci c # avoir des fonctionnalités comme un type nullable que vous pouvez utiliser Cela vous fera économiser un peu de code, il sera également plus robuste. XXX


1 commentaires

Je pense que ma question sur DateTime. Je suis conscient de nullable car tout me donne la réponse. Mais je ne suis pas sûr de savoir comment puis-je changer de format de date?



0
votes

Utilisez

DateTime dt; 
if(DateTime.TryParse(DatetImeValue.Tostring(),dt))   // datetimevalue is your db value
{
     datetimeproperty = dt;   // in your class declare it as DateTime? datetimeproperty 
}
else
{
    datetimeproperty = null;
}


0 commentaires

0
votes
obj.BirthDate = Convert.ToDateTime(string.IsNullOrEmpty(txtBirthDate.Text.ToString()) ? System.Data.SqlTypes.SqlDateTime.MinValue.Value : Convert.ToDateTime(txtBirthDate.Text.ToString()));

0 commentaires