Excesso de tempo em SqlDateTime. Deve ser entre 1/1/1753 00:00:00 e 31/12/9999 11:59:59
Ao realizar a operação de atualização a partir do site, eu continuava recebendo erro, e pensei que fosse a configuração XML ou que algo tivesse dado errado quando a instrução SQL foi executada
Tentei usar o analisador de consultas SQL para pegar as instruções SQL geradas, e descobri qual é o problema com a execução correta? A instrução SQL é a seguinte:
exec sp_executesql N'INSERT NO dbo. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) VALORES (@p0, @p1, @p2, @p3, @p4, @p5, @p6); select SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 datetime,@p6 datetime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL Excesso de tempo em SqlDateTime. Uma resolução deve ser --- entre 01/01/1753 00:00:00 e 31/12/9999 23:59:59
Causa do erro
Se o valor do tipo de tempo passado para o banco de dados for NULL, ou ao inserir ou atualizar o banco de dados para DateTime.MinValue, o valor do campo data-hora é nulo por padrão. NULL aqui se refere a null no código do programa, e a maioria dos cenários em que isso acontece são: uma variável do tipo tempo é definida no programa, e ela é passada para o banco de dados (ou procedimento armazenado) sem atribuir um valor. Neste momento, o valor dessa variável é atribuído por padrão como 01/01/01. Como o campo do tipo DataHora no banco de dados, o valor mínimo é 1/1/1753 12:00:00, enquanto o . NET Framework, o tipo DateTime, o valor mínimo é 1/1/0001 0:00:00, obviamente está fora da faixa mínima de valores do valor SQL, resultando em erro de transbordamento de dados. Vamos dar uma olhada em como ver o tempo mínimo mínimo em .NET e SQL através de C#:
Efeito de saída:
No fim, foi ajustado por mais de dez minutos,
As causas finais de erro são as seguintes:
Um dos tipos de atributos do objeto também é um objeto, ou seja, a tabela possui uma chave estrangeira, e um novo atributo de data-hora é adicionado à tabela de chave estrangeira, que não recebe valor atribuído e não é definido como um tipo nulo
Ao adicionar ou atualizar um objeto, a data-hora do objeto chave estrangeira é automaticamente associada ao valor padrão, porque o tempo do valor padrão .net é menor que o tempo mínimo padrão do banco de dados
Solução: Defina a propriedade do tipo data-hora do objeto chave estrangeira para tipo nullable, ajude colegas a resolvê-lo perfeitamente!
|