phpMyAdmin
 sql >> Base de données >  >> Database Tools >> phpMyAdmin

La chaîne n'a pas été reconnue comme un DateTime valide phpMyAdmin

[Puisque ce n'est pas bien si on continue dans les commentaires (les commentaires vont être longs), je vais juste mettre ici ce que je pense comme solution]

Pour formater dateBuy au format que vous voulez, vous devez également mettre le format de chaîne dans le ToString()

Autrement dit, au lieu de

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

mettre

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

Sinon, c'est possible pour le ToString() pour produire quelque chose comme "2015-10-16 00:00:00 AM" au lieu de "2015-10-16"

Cependant, puisque vous utilisez ParseExact , l'entrée pour le dateBuy2 doit également être au format "aaaa-MM-jj", ce qui va à l'encontre de l'objectif. Vous pouvez envisager d'utiliser DateTimePicker de sorte que vous puissiez contrôler le format d'entrée.

Alternativement, vous pouvez utiliser DateTime.Parse ou TryParse (comme suggéré par Martheen) à la place, quelque chose comme ça

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

Si l'entrée doit être dans le TextBox tu ferais mieux de mettre try-catch pour éviter que votre programme ne plante pour avoir pris une entrée mal formatée si vous utilisez Parse .

Où comme si vous utilisiez TryParse vous pouvez le mettre dans if-else bloquer l'instruction à la place

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
}

Pour obtenir CultureInfo enum vous devez ajouter une référence à System.Globalization

[Modifié après suggestion donnée par M. Soner Gonul]