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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top