55 votes

Comment convertir sqldatetime.minvalue en date / heure?

Je n'arrive pas à convertir un sqldatatime.minvalue en un objet datetime.

J'ai essayé:

 Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
 

Cela n'a évidemment pas fonctionné.

149voto

adrift Points 24386

Pas besoin de convertir. SqlDateTime a une propriété Value qui retourne un DateTime .

 Datetime dt = SqlDateTime.MinValue.Value;
 

73voto

Jon Skeet Points 692016

Une raison de ne pas utiliser uniquement l' opérateur de conversion explicite ?

 DateTime dt = (DateTime) SqlDateTime.MinValue;
 

Ça marche pour moi:

 using System;
using System.Data.SqlTypes;

class Test
{
    static void Main()
    {
        DateTime dt = (DateTime) SqlDateTime.MinValue;
        Console.WriteLine(dt);
    }
}
 

17voto

Anthony Pegram Points 58528

Les réponses que vous avez reçues vous ai montré deux façons de convertir la valeur. La première consiste à utiliser une conversion explicite définie pour SqlDateTime de DateTime, l'autre est l'accès à l' .Value de la propriété sur l' SqlDateTime de l'instance, qui renvoie un DateTime.

var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion

Il y a des différences qui méritent d'être considérées. SqlDateTime prend en charge le concept de valeurs null dans la base de données (DBNull, référencé par un autre désormais supprimé réponse), par la valeur SqlDateTime.Null. Si vous accédez à l' Value de la propriété à une valeur "null" exemple, vous allez courir dans une SqlNullValueException. D'autre part, une conversion explicite de type DateTime résultats en {January 1, 1900 12:00:00 AM}. Aucune de ces résultats peut être désiré dans votre code. L'écrasement d'un nulle valide l'entrée à la base de données avec une valeur non nulle valeur par défaut peut être tout aussi mauvais que l'obtention d'une exception à l'exécution.

Si vous avez une colonne pouvant être null dans la base de données, et si vous travaillez avec des SqlDateTime, vous devrez peut-être explicitement tester et traiter l' SqlDateTime.Null différemment, et alors il pourrait ne pas importe l'approche que vous prenez à la conversion d'autres valeurs.

DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
    date = null
else 
    date = theSqlDate.Value; // or (DateTime)theSqlDate;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X