SqlDateTime Exception estouro
-
04-07-2019 - |
Pergunta
Eu estou tentando inserir um momento único valor, mas obter o seguinte erro
- ex { "estouro de SqlDateTime. Deve ser entre 1/1/1753 0:00:00 e 12/31/9999 11:59:59."} System.Exception
A partir da extremidade dianteira, o tempo é selecionado usando o controle "TimeEdit", com a cima e para baixo. A tabela no SQL Server tem os campos definidos como smalldatetime. Eu só precisa armazenar o tempo todo. Eu uso o seguinte para retornar dados para o aplicativo
select id, CONVERTER (CHAR (5), timeFrom, 8) como timeFrom, CONVERTER (CHAR (5), timeto, 8) como timeto DE dbo.Availability onde ID = @id e DAYNAME = @weekday
Como faço para passar o tempo apenas para a mesa?
Solução Editar ~ De acordo com Euardo e Chris, minha solução foi passar uma seqüência de data e hora em vez de uma única vez string. Eu formatei meu resultado como por Time Format usando "g".
Graças
Solução
Escolha uma data que está na faixa (ou seja, 1/1/1970) e usá-lo para tudo que você inserir.
Outras dicas
Você pode definir a data de 1/1/1753 wich é valor de data min para datetime em MSSQL e em seguida, adicione a hora que você deseja armazenar. Claro que você tem que considerar isso toda vez que você precisa para obter o valor, mas você pode quebrar isso com alguns ajudantes. Ou você pode usar MSSQL 2008 e usar o novo tipo de dados TIME.
Se você está mantendo apenas o controle do tempo, pensar em armazená-lo em um int como um deslocamento a partir da meia-noite em qualquer granualarity que você precisa (segundos, minutos, horas, ...). Você pode, em seguida, convertê-lo para um TimeSpan em seu código usando o TimeSpan.From apropriado ?? () método. Para voltar para o outro lado, você pode usar TimeSpan.Total ?? e truncado se for necessário. Se você precisa fazer consultas manuais você pode escrever uma função SQL que irá converter horas / minutos / segundos para o equivalente offset.
Eu prefiro este ao longo usando um datetime e escolher um dia arbitrária, uma vez que torna a finalidade do campo mais claro, o que reduz a confusão.
não existe tal coisa como o tempo em SQL, há apenas DateTime.
Para o seu propósito, gostaria de usar algo assim para retornar somente a parte do tempo.
SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))
onde GETDATE () é a data e hora que você deseja filtrar.
Ao definir o tempo no banco de dados, você terá que adicionar '01 / 01 / 1901' ou '01 / 01 / 1753' com o tempo.
Não usar CAST e converter para varchar ao trabalhar com data e hora, o seu lento. Furar a flutuante operações numéricas.