Question

J'essaie d'insérer une valeur de temps uniquement, mais l'erreur d'erreur suivante

  
      
  • ex {"SqlDateTime débordement. Doit être entre le 1/1/1753 00:00:00 et le 31/12/9999 23:59:59. "} System.Exception
  •   

À partir du début, l'heure est sélectionnée à l'aide de l'option "TimeEdit". contrôle, avec les flèches haut et bas. La table dans SQL Server a les champs définis comme étant smalldatetime. Je n'ai besoin que de stocker l'heure. J'utilise ce qui suit pour renvoyer des données à l'application

sélectionnez id, CONVERT (CHAR (5), timeFrom, 8) en tant que timeFrom, CONVERT (CHAR (5), timeTo, 8) en tant que timeTo. À partir de dbo.Availability où id = @id et dayName = @weekday

Comment puis-je passer le temps seulement à la table?

Éditer ~ Solution Selon Euardo et Chris, ma solution consistait à transmettre une chaîne datetime au lieu d’une chaîne contenant uniquement le temps. J'ai formaté mon résultat selon le Format de l'heure avec "g".

Merci

Était-ce utile?

La solution

Choisissez une date comprise dans la plage (1/1/1970) et utilisez-la pour tout ce que vous insérez.

Autres conseils

Vous pouvez définir la date sur 1/1/1753, qui correspond à la date / heure minimale pour datetime dans MSSQL, puis ajouter l'heure que vous souhaitez stocker. Bien sûr, vous devez en tenir compte à chaque fois que vous avez besoin d'obtenir la valeur, mais vous pouvez en conclure avec quelques aides. Vous pouvez également utiliser MSSQL 2008 et utiliser le nouveau type de données TIME.

Si vous ne faites que garder une trace de l'heure, pensez à la stocker dans un int comme un décalage à partir de minuit dans la granularité dont vous avez besoin (secondes, minutes, heures, ...). Vous pouvez ensuite le convertir en TimeSpan dans votre code à l'aide de la méthode TimeSpan.From ?? () appropriée. Pour revenir en arrière, vous pouvez utiliser TimeSpan.Total ?? et tronquer si besoin est. Si vous devez effectuer des requêtes manuelles, vous pouvez écrire une fonction SQL qui convertira les heures / minutes / secondes en décalage équivalent.

Je préfère ceci plutôt que d'utiliser un date-heure et de choisir un jour arbitraire, car cela clarifie le but du champ, ce qui réduit les risques de confusion.

il n’existe pas de Time en SQL, il n’ya que DateTime.

Pour ce faire, j'utiliserais quelque chose comme ceci pour ne renvoyer que la partie temps.

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))

où GETDATE () est la date-heure que vous souhaitez filtrer.

Lors du réglage de l'heure dans la base de données, vous devrez ajouter "01/01/01" ou "01/01/1753" à l'heure.

Ne pas utiliser CAST et convertir en varchar quand on travaille avec datetime, c'est lent. S'en tenir à des opérations numériques flottantes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top