Quel est le meilleur moyen de représenter une plage de temps dans SQL Server CE?
Spécifiquement parlant, j'ai seulement besoin d'heures:minutes, mais dire que j'ai un .NET objet TimeSpan, comment dois-je stocker dans un SQL(CE) de la base de données?
Vous devez vous connecter pour publier un commentaire.
Je vous recommande d'utiliser un long pour représenter le nombre de les tiques. C'est ce que TimeSpan utilise car il est la représentation interne. Cela vous permet de facilement reconstituer votre objet avec la Timespan.FromTicks() méthode, et la sortie à la base de données à l'aide de la Timespan.Tiques de la propriété. La plus petite unité de temps .NET est la tique, qui est égale à 100 nanosecondes
Magasin comme un varchar. Enregistrer pour sql à l'aide de
TimeSpan.ToString()
. Lire à partir de sql comme:'00:02'
au lieu de1200000000
SQL CE n'est pas un type de temps, ou de types définis par l'utilisateur, de sorte que les choix sont datetime ou un entier représentant les minutes. Si le plus grand temps dont vous avez besoin pour stocker est 23:59 = 23 * 60 + 59 = 1439 = le nombre de minutes dans une journée à partir de la minute 0, un smallint est le plus petit type intégral qui va accueillir cette plage.
Résister à la tentation de stocker des heures et des minutes dans des colonnes distinctes comme tinyints. Utiliser le même espace que d'un seul type smallint, mais chaque calcul de fois exigera multipliant les heures en 60 et en ajoutant minutes, et chaque
order by
aurez besoin de deux colonnes au lieu d'une.Store minutes; sur l'écran, vous pouvez séparer les minutes en heures et minutes avec
J'avais le nom de la colonne(s)
minutes
, ouabsminutes
(pour absolue minutes) si vous souhaitez distinguer le 1439 minutes dans une journée de 0 à 59 minutes dans une heure.Pour convertir la base de données de la valeur à un objet Timespan, utilisez le ctor
Timespan(int, int, int)
comme cenew TimeSpan( floor(absminutes /60 ), absminutes % 60, 0)
ou (mieux) le ctorTimespan(long)
avecnew Timespan( absminutes * TimeSpan.TicksPerMinute )
.D'insérer ou de mettre à jour la base de données à partir d'un objet Timespan, ensemble absminutes à
someTimespan.TotalMinutes % 1440
.Je suis en train d'envisager l'aide de SQL Temps pour gérer cela, mais il ne fonctionne pas pour >= 24 heures.
Les avantages comprennent facilement lisibles, facilement utilisable dans les deux SQL et dans le code, mais la chute est que vous avez seulement une petite plage de temps pour jouer avec.
et