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)