Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 22966|Antwort: 1

[Quelle] spring.net nhibernate sqldatetime overflow solution

[Link kopieren]
Veröffentlicht am 13.09.2017 14:34:58 | | | |
SqlDateTime-Überlauf. Muss zwischen dem 1.1.1753 00:00:00 Uhr und dem 31.12.999 23:59:59 Uhr liegen




Als ich die Aktualisierung von der Website aus durchgeführt habe, bekam ich immer wieder einen Fehler und dachte, es läge an der XML-Konfiguration oder etwas sei schiefgelaufen, als die SQL-Anweisung ausgeführt wurde

Ich habe versucht, den SQL-Abfrageanalysator zu verwenden, um die generierten SQL-Anweisungen abzurufen, und festgestellt, was ist das Problem mit der korrekten Ausführung? Die SQL-Anweisung lautet wie folgt:

Exec sp_executesql N'INSERT INTO DBO. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) WERTE (@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-Überlauf. Ein Beschluss muss zwischen dem 1.1.1753 um 00:00:00 Uhr und am 31.12.999 um 23:59:59 Uhr --- werden

Fehlerursache

    Wenn der Wert des an die Datenbank übergebenen Zeittyps NULL ist oder beim Einfügen oder Aktualisieren der Datenbank für DateTime.MinValue, ist der Datetime-Feldwert standardmäßig null.
    NULL bezeichnet hier Null im Programmcode, und die meisten Szenarien, in denen dies passiert, sind: Eine Zeittyp-Variable wird im Programm definiert und an die Datenbank (oder gespeicherte Prozedur) weitergegeben, ohne einen Wert zuzuweisen. Zu diesem Zeitpunkt wird der Wert dieser Variablen standardmäßig 01/01/01 zugewiesen.
     Seit dem Typfeld DateTime in der Datenbank ist der Mindestwert 1/1/1753 12:00:00, während die . NET Framework, der DateTime-Typ, hat einen Mindestwert von 1/1/0001 0:00:00, offensichtlich liegt er außerhalb des Mindestwertbereichs des SQL-Werts, was zu einem Datenüberlauffehler führt.
    Schauen wir uns an, wie man .NET und SQL mit C# die maximale Mindestzeit sieht:


Ausgabeeffekt:



Am Ende wurde es mehr als zehn Minuten lang herumgebastelt,

Die endgültigen Fehlerursachen sind wie folgt:

Einer der Attributtypen des Objekts ist ebenfalls ein Objekt, das heißt, die Tabelle hat einen Fremdschlüssel, und ein neues Datum-Zeit-Attribut wird der Fremdschlüssel-Tabelle hinzugefügt, das keinen Wert zugewiesen und nicht auf einen nullbaren Typ gesetzt ist

Beim Hinzufügen oder Aktualisieren eines Objekts wird die Datumszeit des Fremdschlüsselobjekts automatisch mit dem Standardwert verknüpft, da die Zeit des .net-Standardwerts kleiner ist als die Standard-Mindestzeit der Datenbank

Lösung: Setzen Sie die Eigenschaft eines Datetime-Typs des Fremdschlüsselobjekts auf nullablen Typ, helfen Sie den Kollegen, das perfekt zu lösen!







Vorhergehend:.net/c# Operation Redis Cache-Hinzufügen, Löschen, Modifikation und Abfrage [Quellcode]
Nächster:asp.net Website-Anomaliefehleranalyse
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com