SqlDateTime overflow. Moet zijn tussen 1/1/1753 00:00:00 en 31/12/9999 23:59:59
Bij het uitvoeren van de update-operatie vanaf de website kreeg ik steeds een foutmelding, en ik dacht dat het de XML-configuratie was of dat er iets mis was gegaan toen de SQL-instructie werd uitgevoerd
Ik probeerde SQL query analyzer te gebruiken om de gegenereerde SQL-statements te halen, en ontdekte wat het probleem is met de juiste uitvoering? De SQL-instructie is als volgt:
exec sp_executesql N'INSERT INTO dbo. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) VALUES (@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 SqlDateTime overflow. Een resolutie moet worden --- tussen 1-1-1753 00:00:00 en 31-12-9999 23:59:59
Foutoorzaak
Als de waarde van het tijdstype dat aan de database is doorgegeven NULL is, of bij het invoegen of updaten van de database voor DateTime.MinValue, is de datetime-veldwaarde standaard nul. NULL verwijst hier naar null in de programmacode, en de meeste scenario's waarin dit gebeurt zijn: een tijdtypevariabele wordt in het programma gedefinieerd en wordt doorgegeven aan de database (of opgeslagen procedure) zonder een waarde toe te wijzen. Op dit moment wordt de waarde van deze variabele standaard 01/01/01 toegewezen. Sinds het DateTime-typeveld in de database is de minimale waarde 1/1/1753 12:00:00, terwijl de . NET Framework, het type DateTime, heeft een minimale waarde van 1/1/0001 0:00:00, uiteraard buiten het minimumwaardebereik van de SQL-waarde, wat resulteert in een data-overflowfout. Laten we eens kijken hoe je .net en sql de maximale minimale tijd via C# kunt zien:
Output-effect:
Uiteindelijk werd het meer dan tien minuten geknutseld,
De uiteindelijke foutoorzaken zijn als volgt:
Een van de attribuuttypen van het object is ook een object, dat wil zeggen, de tabel heeft een vreemde sleutel, en een nieuw datetime-attribuut wordt toegevoegd aan de vreemde sleutel-tabel, die geen waarde krijgt en niet is ingesteld op een nulleerbaar type
Bij het toevoegen of updaten van een object wordt de datumtijd van het vreemde sleutelobject automatisch gekoppeld aan de standaardwaarde, omdat de tijd van de .net-standaardwaarde kleiner is dan de standaard minimumtijd van de database
Oplossing: Stel de eigenschap van een datetime-type van het vreemde sleutelobject in op nul-type, help collega's het perfect op te lossen!
|