Domanda

Sto cercando di inserire un valore solo tempo, ma ottengo il seguente errore

  
      
  • ex {" SqlDateTime overflow. Deve essere compreso tra il 01/01/1753 12:00:00 e il 31/12/9999 23:59:59. & Quot;} System.Exception
  •   

Dal front-end, l'ora viene selezionata usando " TimeEdit " controllo, con le frecce su e giù. La tabella in SQL Server ha i campi impostati come smalldatetime. Devo solo memorizzare l'ora. Uso quanto segue per restituire i dati all'app

seleziona id, CONVERT (CHAR (5), timeFrom, 8) come timeFrom, CONVERT (CHAR (5), timeTo, 8) come timeTo DA dbo. Disponibilità dove id = @id e dayName = @weekday

Come faccio a passare il tempo solo al tavolo?

Modifica ~ Soluzione Secondo Euardo e Chris, la mia soluzione era di passare una stringa datetime anziché una stringa solo tempo. Ho formattato il mio risultato secondo Time Format usando " g ".

Grazie

È stato utile?

Soluzione

Scegli una data compresa nell'intervallo (ovvero, 1/1/1970) e usala per tutto ciò che inserisci.

Altri suggerimenti

È possibile impostare la data su 1/1/1753 che è il valore minimo data per datetime in MSSQL e quindi aggiungere l'ora che si desidera memorizzare. Ovviamente devi considerare questo ogni volta che devi ottenere il valore, ma puoi racchiuderlo con alcuni aiutanti. Oppure puoi usare MSSQL 2008 e usare il nuovo tipo di dati TIME.

Se stai solo tenendo traccia del tempo, pensa a memorizzarlo in un int come offset da mezzanotte in qualsiasi granularità di cui hai bisogno (secondi, minuti, ore, ...). È quindi possibile convertirlo in un TimeSpan nel codice utilizzando il metodo TimeSpan.From ?? () appropriato. Per tornare indietro, puoi usare TimeSpan.Total ?? e troncare se necessario. Se è necessario eseguire query manuali, è possibile scrivere una funzione SQL che convertirà ore / minuti / secondi nell'offset equivalente.

Preferisco questo rispetto all'uso di un datetime e alla scelta di un giorno arbitrario in quanto rende più chiaro lo scopo del campo, riducendo la confusione.

Non esiste una cosa come Time in SQL, c'è solo DateTime.

Ai tuoi scopi, userei qualcosa del genere per restituire solo la parte del tempo.

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

dove GETDATE () è il datetime che si desidera filtrare.

Quando si imposta l'ora nel database, sarà necessario aggiungere '01 / 01/1901 'o '01 / 01/1753' all'ora.

Non usare CAST e Convert in varchar quando si lavora con datetime, è lento. Attenersi alle operazioni numeriche fluttuanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top