0

Ich habe gesucht, aber nicht meine Antwort gefunden mich so vergeben, wenn diese Frage ein Duplikat ist.Wie überprüfe ich nach einem gültigen Datum in C# (mit einem Datetime-Typ und nicht mit Datetime2)?

Ich habe eine .NET C# -Anwendung, die Entity Framework (EF) verwendet, um mit einer SQL Server-Datenbank zu kommunizieren. Ich konvertiere eine große Menge an Daten und muss sicherstellen, dass meine Daten gültige Datetime-Typen von SQL Server sind. Meine POCO-Klassen verwenden einen datetime2-Typ für die Daten, sodass ein Datum "0201-04-11 13:00:00 PM" gültig ist, bis die Einfügung tatsächlich in der SQL Server-Datenbank versucht wird. Ich versuche DateTime.TryParseExact mit so etwas zu verwenden ...

if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid)) 
{ 
    // Load record into lease payment table table 
    LoadLeasePayment loadLeasePayment = new LoadLeasePayment(); 
    Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate); 
} 

Ich bin sicher, dass die Lösung liegt auf der Hand, aber ich kann nicht den Wald vor lauter Bäumen nicht sehen. Jede Hilfe wird sehr geschätzt.

+0

Was meinst du mit gültig? '2017-02-05 18: 25: 31.998' kann einem Datetime zugewiesen werden, wird aber geändert auf' 2017-02-05 18: 25: 31.997' ist das ein Problem? –

+0

Mögliches Duplikat von [Error - SqlDateTime overflow. Muss zwischen 1/1/1753 12:00:00 Uhr und 12/31/9999 23:59:59 Uhr] (http://stackoverflow.com/questions/3399061/error-sqldatetime-overflow-must-be- zwischen-1-1-1753-120000-am-and-12-31-999) –

Antwort

0

Nach dem Analysieren des DateTime-Werts für die Zeichenfolge müssen Sie sicherstellen, dass er im Bereich des SQL-Zieldatentyps liegt. Die SqlDateTime-Struktur enthält statische MinValue- und MaxValue-Felder, um dies zu erleichtern.

if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid)) 
{ 
    if((datePaid >= SqlDateTime.MinValue) && (datePaid <= SqlDateTime.MaxValue)) 
    { 
     // Load record into lease payment table table 
     LoadLeasePayment loadLeasePayment = new LoadLeasePayment(); 
     Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate); 
    } 
} 
Verwandte Themen