Υπερχείλιση SqlDateTime. Πρέπει να είναι μεταξύ 1/1/1753 12:00:00 π.μ. και 31/12/9999 11:59:59 μ.μ.
Κατά την εκτέλεση της λειτουργίας ενημέρωσης από τον ιστότοπο, συνέχισα να λαμβάνω ένα σφάλμα και νόμιζα ότι ήταν η διαμόρφωση XML ή κάτι πήγε στραβά κατά την εκτέλεση της δήλωσης SQL
Προσπάθησα να χρησιμοποιήσω τον αναλυτή ερωτημάτων SQL για να πάρω τις δηλώσεις SQL που δημιουργήθηκαν και διαπίστωσα ότι ποιο είναι το πρόβλημα με τη σωστή εκτέλεση; Η δήλωση SQL έχει ως εξής:
exec sp_executesql N'INSERT INTO dbo. LeanLogs (Έκδοση, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, Treated Time) ΤΙΜΕΣ (@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. Η ανάλυση πρέπει να --- μεταξύ 1/1/1753 12:00:00 π.μ. και 31/12/9999 11:59:59 μ.μ.
Αιτία σφάλματος
Εάν η τιμή του τύπου ώρας που μεταβιβάζεται στη βάση δεδομένων είναι NULL ή κατά την εισαγωγή ή την ενημέρωση της βάσης δεδομένων για το DateTime.MinValue, η τιμή του πεδίου ημερομηνίας/ώρας είναι null από προεπιλογή. Το NULL εδώ αναφέρεται στο null στον κώδικα του προγράμματος και τα περισσότερα από τα σενάρια όπου συμβαίνει αυτό είναι: μια μεταβλητή τύπου χρόνου ορίζεται στο πρόγραμμα και μεταβιβάζεται στη βάση δεδομένων (ή στην αποθηκευμένη διαδικασία) χωρίς να εκχωρηθεί τιμή. Προς το παρόν, η τιμή αυτής της μεταβλητής εκχωρείται από προεπιλογή 01/01/01. Δεδομένου ότι το πεδίο τύπου ημερομηνίας/ώρας στη βάση δεδομένων, η ελάχιστη τιμή είναι 1/1/1753 12:00:00, ενώ η τιμή . NET Framework, ο τύπος ημερομηνίας/ώρας, η ελάχιστη τιμή είναι 1/1/0001 0:00:00, προφανώς, είναι εκτός του ελάχιστου εύρους τιμών της τιμής sql, με αποτέλεσμα ένα σφάλμα υπερχείλισης δεδομένων. Ας ρίξουμε μια ματιά στο πώς μπορείτε να δείτε τον μέγιστο ελάχιστο χρόνο .net και sql μέσω C#:
Εφέ εξόδου:
Στο τέλος, μαστορεύτηκε για περισσότερα από δέκα λεπτά,
Οι τελικές αιτίες σφάλματος είναι οι εξής:
Ένας από τους τύπους χαρακτηριστικών του αντικειμένου είναι επίσης ένα αντικείμενο, δηλαδή, ο πίνακας έχει ένα ξένο κλειδί και ένα νέο χαρακτηριστικό ημερομηνίας/ώρας προστίθεται στον πίνακα εξωτερικού κλειδιού, στον οποίο δεν έχει εκχωρηθεί τιμή και δεν έχει οριστεί σε τύπο nullable
Κατά την προσθήκη ή την ενημέρωση ενός αντικειμένου, η ημερομηνία/ώρα του αντικειμένου ξένου κλειδιού επισυνάπτεται αυτόματα στην προεπιλεγμένη τιμή, επειδή ο χρόνος της προεπιλεγμένης τιμής .net είναι μικρότερος από τον προεπιλεγμένο ελάχιστο χρόνο της βάσης δεδομένων
Λύση: Ορίστε την ιδιότητα ενός τύπου ημερομηνίας/ώρας του αντικειμένου ξένου κλειδιού σε τύπο nullable, βοηθήστε τους συναδέλφους να το λύσουν τέλεια!
|