Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 22966|Απάντηση: 1

[Πηγή] spring.net λύση υπερχείλισης αδρανοποίησης sqldatetime

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/9/2017 2:34:58 μ.μ. | | | |
Υπερχείλιση 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, βοηθήστε τους συναδέλφους να το λύσουν τέλεια!







Προηγούμενος:.net/c# λειτουργία redis cache προσθήκη, διαγραφή, τροποποίηση και ερώτημα [πηγαίος κώδικας]
Επόμενος:asp.net Ανάλυση σφαλμάτων ανωμαλιών ιστότοπου
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com