sql >> Databáze >  >> RDS >> Sqlserver

Chyba – přetečení SqlDateTime. Musí být mezi 1. 1. 1753 12:00:00 a 31. 12. 9999 23:59:59

A DateTime v C# je typ hodnoty, nikoli typ odkazu, a proto nemůže být null. Může to však být konstanta DateTime.MinValue který je mimo rozsah serverů SQL DATETIME datový typ.

U typů hodnot je zaručeno, že budou mít vždy (výchozí) hodnotu (nulu), aniž by je bylo nutné vždy explicitně nastavit (v tomto případě DateTime.MinValue).

Závěr je, že pravděpodobně máte nenastavenou hodnotu DateTime, kterou se pokoušíte předat do databáze.

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

Pokud jde o SQL Server

MSDN:Sql Server DateTime a SmallDateTime

A konečně, pokud zjistíte, že předáváte C# DateTime jako řetězec pro sql jej musíte naformátovat následovně, abyste zachovali maximální přesnost a zabránili serveru SQL ve vyvolání podobné chyby.

string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

Aktualizace (8 let později)

Zvažte použití sql DateTime2 datový typ, který lépe odpovídá .net DateTime s rozsahem dat 0001-01-01 through 9999-12-31 a časový rozsah 00:00:00 through 23:59:59.9999999

string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

MSDN datetime2 (Transact-SQL)



  1. Rails 3 ActiveRecord:Seřaďte podle počtu přidružení

  2. Způsoby přístupu k databázi Oracle v PostgreSQL

  3. sečíst dva řádky a seřadit podle data / celkem

  4. .NET / Oracle:Jak programově spustit skript s příkazy DDL