2011-10-07 5 views
43

Je n'arrive pas à convertir une sqldatatime.minvalue en un objet datetime.Comment convertir sqldatetime.minvalue en datetime?

J'ai essayé:

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

Cela évidemment ne fonctionne pas.

+0

Merci pour votre inscription. Votre code m'a aidé à lire un retour SQL 'DateTime dateValue = Convert.ToDateTime (lecteur.GetValue (8));' –

Répondre

62

Une raison de ne pas simplement utiliser le explicit conversion operator?

DateTime dt = (DateTime) SqlDateTime.MinValue; 

qui fonctionne pour moi:

using System; 
using System.Data.SqlTypes; 

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

pourquoi cela fonctionnerait-il et pas Convert.ToDateTime() étrange non? – codecompleting

+4

@codecompleting, 'Convert.ToDateTime' nécessiterait une surcharge appropriée pour supporter la valeur' SqlDateTime'. Les concepteurs de 'Convert' ne doivent pas l'avoir considéré [assez important], alors que les concepteurs de' SqlDateTime' l'ont certainement fait. –

126

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

DateTime dt = SqlDateTime.MinValue.Value; 
+30

Une question rare où il y a une meilleure réponse à Jon Skeets :-) – PeteT

+1

Je ne l'ai pas vu venir. –

14

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

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

Il existe des compromis qui méritent d'être pris en compte. SqlDateTime prend en charge le concept de valeurs nulles dans la base de données (DBNull, référencé par une autre réponse supprimée) via la valeur SqlDateTime.Null. Si vous accédez à la propriété Value sur une instance "null", vous rencontrerez un SqlNullValueException. D'un autre côté, une conversion explicite en DateTime aboutit à {January 1, 1900 12:00:00 AM}. Aucun de ces résultats ne peut être souhaité dans votre code. L'écrasement d'une entrée null valide dans la base de données avec une valeur par défaut non nulle peut être tout aussi mauvais que l'obtention d'une exception lors de l'exécution. Si vous avez une colonne Nullable dans la base de données et si vous travaillez avec SqlDateTime, vous devrez peut-être tester et traiter explicitement SqlDateTime.Null différemment, et peu importe l'approche que vous utiliserez pour convertir d'autres valeurs.

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

C'est une réponse rare qui vaut mieux qu'une réponse qui est meilleure que celle de Jon Skeet. –