Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro - estouro de SqlDateTime. Deve estar entre 01/01/1753 00:00:00 e 31/12/9999 23:59:59


Um DateTime em C# é um tipo de valor, não um tipo de referência e, portanto, não pode ser nulo. No entanto, pode ser a constante DateTime.MinValue que está fora do intervalo de Sql Servers DATETIME tipo de dados.

Tipos de valor são garantidos para sempre ter um valor (padrão) (de zero) sem sempre precisar ser definido explicitamente (neste caso, DateTime.MinValue).

A conclusão é que você provavelmente tem um valor DateTime não definido que está tentando passar para o banco de dados.
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999, 
                    exactly one 100-nanosecond tick 
                    before 00:00:00, January 1, 10000

MSDN:DateTime.MinValue

Sobre o Sql Server

MSDN:Sql Server DateTime e SmallDateTime

Por fim, se você estiver passando um C# DateTime como uma string para sql, você precisa formatá-la da seguinte forma para manter a máxima precisão e evitar que o sql server gere um erro semelhante.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

Atualização (8 anos depois)

Considere usar o sql DateTime2 tipo de dados que se alinha melhor com o .net DateTime com intervalo de datas 0001-01-01 through 9999-12-31 e intervalo de tempo 00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

MSDN datetime2 (Transact-SQL)