Pergunta

Especificamente falando, eu apenas horas precisam: minutos, mas dizer que tenho um objeto .NET TimeSpan, como devo guardar isso em um banco de dados SQL (CE)

?
Foi útil?

Solução

Eu recomendo usar um longo para representar o número de carrapatos . Isso é o que TimeSpan usos como de representação interna. Isso permite que você facilmente reconstituir o seu objeto com a Timespan.FromTicks () método , e saída para a base de dados utilizando o Timespan .Ticks propriedade. A menor unidade de tempo em .NET é o carrapato, que é igual a 100 nanossegundos

Outras dicas

loja como um varchar. Salvar para SQL usando TimeSpan.ToString(). Leia a partir do SQL como:

TimeSpanObj = TimeSpan.Parse(fieldValue)

SQL CE não tem um tipo de tempo, ou tipos definidos pelo usuário, de modo que suas escolhas são datetime ou um int representando minutos. Se o maior tempo que você precisa para loja é 23:59 = 23 * 60 + 59 = 1439 = o número de minutos em um dia a partir de minuto 0, um smallint é o menor tipo integral que irá acomodar nesse intervalo.

Resista à tentação de armazenar horas e minutos em colunas separadas como tinyints. Que usaria o mesmo espaço que um único smallint, mas, em seguida, todos os cálculos de vezes exigirá horas multiplicar por 60 e adicionando minutos, e cada order by exigirá duas colunas em vez de um.

loja de minutos; em exibição, você pode separar os minutos horas e minutos com

select floor( absminutes / 60 ) as hours, absminutes % 60 as minutes,
from some table
order by absminutes; 

Eu nomear a coluna (s) minutes, ou absminutes (para minutos absolutos) se você quiser distinguir os 1439 minutos em um dia a partir das 0-59 minutos em uma hora.

Para converter a partir do valor base de dados para um objeto Timespan, utilize o Timespan(int, int, int) ctor assim new TimeSpan( floor(absminutes / 60 ), absminutes % 60, 0) ou (melhor) a Timespan(long) ctor com new Timespan( absminutes * TimeSpan.TicksPerMinute ).

Para inserir ou atualizar o banco de dados a partir de um objeto Timespan, absminutes definidos para someTimespan.TotalMinutes % 1440.

Atualmente estou pensando em usar Tempo SQL para lidar com isso, mas não vai funcionar para> = 24 horas.

Os benefícios incluem facilmente legível, facilmente utilizável tanto em SQL e em código, mas a queda é que você só tem um pequeno período de tempo para brincar.

declare @delay table (DelayTime Time(3))
insert into @delay values ('00:10:00.000')
select getdate() as nowtime, getdate()+DelayTime as nowPlusTen from @delay

e

SqlDataReader dr = cmd.ExecuteReader();
DelayTime = (TimeSpan) dr["DelayTime"];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top