phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

String wurde nicht als gültiges DateTime phpMyAdmin erkannt

[Da es nicht gut ist, wenn wir in den Kommentaren fortfahren (die Kommentare werden lang sein), werde ich hier nur das posten, was ich als Lösung denke]

Um dateBuy zu formatieren Um das gewünschte Format zu erreichen, sollten Sie auch das Zeichenfolgenformat in ToString() einfügen

Das heißt, anstelle von

dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();

setzen

dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");

Ansonsten ist es für ToString() möglich etwas wie „2015-10-16 00:00:00 AM“ anstelle von „2015-10-16“ zu produzieren

Da Sie jedoch ParseExact verwenden , die Eingabe für dateBuy2 muss auch im Format "JJJJ-MM-TT" vorliegen, was den Zweck verfehlt. Sie können die Verwendung von DateTimePicker in Betracht ziehen sodass Sie das Eingabeformat steuern können.

Alternativ können Sie DateTime.Parse verwenden oder TryParse (wie von Martheen vorgeschlagen) stattdessen etwas in der Art

try {
    DateTime dt = DateTime.Parse(txtDateBuy.Text);
    dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
    //wrong format, do something to tell the user
}

Wenn die Eingabe in der TextBox erfolgen muss Sie setzen besser try-catch ein um zu verhindern, dass Ihr Programm abstürzt, weil es falsch formatierte Eingaben akzeptiert, wenn Sie Parse verwenden .

Als ob Sie TryParse verwenden würden Sie können es in if-else einfügen block-Anweisung statt

DateTime dt;
if (DateTime.TryParse(txtDateBuy.Text, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt)) {
    //correct format, do something using dt
} else {
    //incorrect format, warns the user
}

Um CultureInfo zu erhalten enum Sie müssen einen Verweis auf System.Globalization hinzufügen

[Bearbeitet nach einem Vorschlag von Mr. Soner Gonul]