SqlDateTime.MinValue != DateTime.MinValue, pourquoi?
Je me demande, pourquoi SqlDateTime.MinValue n'est pas le même que le type DateTime.MinValue?
Vous devez vous connecter pour publier un commentaire.
Je me demande, pourquoi SqlDateTime.MinValue n'est pas le même que le type DateTime.MinValue?
Vous devez vous connecter pour publier un commentaire.
Je pense que la différence entre SQL et .NET Date types de données provient du fait que SQL Server est datetime type de données, c'est les valeurs minimale et maximale, et c'est la précision sont beaucoup plus âgés que les .NET type de données DateTime.
Avec l'avènement de la .NET, l'équipe a décidé que le type de données Datetime devrait avoir un plus naturel valeur minimale, et 01/01/0001 semble assez logique, et certainement à partir d'un langage de programmation, plutôt que de base de données point de vue, cette valeur est plus naturel.
D'ailleurs, avec SQL Server 2008, il y a un certain nombre de nouvelle Date basée sur les types de données (Date, Le temps, DateTime2, DateTimeOffset) qui offre une augmentation de la portée et de précision, et étroitement carte pour le type de données DateTime dans .NET. Par exemple, le DateTime2 type de données a une plage de dates à partir de 0001-01-01 par 9999-12-31.
La norme "datetime" type de données de SQL Server a toujours eu une valeur minimale de 01/01/1753 (et toujours!). Je dois avouer, que j'étais trop curieux de savoir la signification de cette valeur, donc fait quelques recherches.. Ce que j'ai trouvé comme suit:
Cette citation ci-dessus, à partir de prises à partir du lien suivant:
SQL optimisation des Performances: les Dates en SQL
Depuis, dans SQL Server la date minimale qui peut être stockée dans un champ datetime (1753/1/1), n'est pas égale à la MinValue de type DateTime .NET type de données (0001/1/1).
1753, était la date de la première à adopter le calendrier Grégorien (Angleterre). Pourquoi ce qui a été choisi 01/01/0001 - c'est sans doute l'héritage de lorsque SQL Server Sybase dans les années 1990. Ils ont pris la décision de conception dès le début, et Microsoft SQL équipe n'ai pas vu de raison de le modifier.
Depuis l'explosion de .NET et de l'intégration de Sql Server, il est maintenant le DateTime2 objet pour assurer la compatibilité. Si vous êtes un NHibernate utilisateur, vous pouvez fournir ce type dans votre type de mappages pour éviter
DateTime.Min
problèmes.NET Dates de répondre pour les autres calendriers en plus de celui Grégorien:
La JulianCalendar enfait pré-dates
DateTime.MinValue
Deux groupes différents décidé de ce "minimum" signifie pour eux à l'égard de date/heure.
SQL utilise une autre représentation interne pour le type DateTime.