sql >> Database >  >> RDS >> Sqlserver

Fout - SqlDateTime-overloop. Moet tussen 1/1/1753 12:00:00 AM en 31/12/9999 23:59:59 PM zijn

Een DateTime in C# is een waardetype, geen referentietype, en kan daarom niet null zijn. Het kan echter de constante zijn DateTime.MinValue die buiten het bereik van Sql Servers DATETIME . valt data type.

Waardetypes hebben gegarandeerd altijd een (standaard) waarde (van nul) zonder dat dit altijd expliciet hoeft te worden ingesteld (in dit geval DateTime.MinValue).

Conclusie is dat je waarschijnlijk een niet-ingestelde DateTime-waarde hebt die je probeert door te geven aan de database.

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

Over SQL Server

MSDN:Sql Server DateTime en SmallDateTime

Ten slotte, als u merkt dat u een C# DateTime . passeert als een string naar sql, moet u deze als volgt formatteren om maximale precisie te behouden en om te voorkomen dat de sql-server een soortgelijke fout genereert.

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

Update (8 jaar later)

Overweeg het gebruik van de sql DateTime2 datatype dat beter aansluit bij de .net DateTime met datumbereik 0001-01-01 through 9999-12-31 en tijdbereik 00:00:00 through 23:59:59.9999999

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

MSDN datetime2 (Transact-SQL)



  1. SQL-syntaxisfout bij het maken van een opgeslagen procedure in MySQL

  2. raar - mysql's sql::SQLException wordt niet gevangen door zijn type, maar wordt gevangen als std::exception en succesvol teruggeworpen

  3. Invoegen met behulp van PreparedStatement. Hoe kan ik de ID automatisch verhogen?

  4. Mysql bestel op kolom met unicode-tekens