[Dato che non va bene se continuiamo nei commenti (i commenti saranno lunghi), mi limiterò a presentare quella che penso come soluzione qui]
Per formattare dateBuy nel formato che desideri, dovresti anche inserire il formato della stringa in ToString()
Cioè, invece di
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
metti
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Altrimenti, è possibile per ToString() per produrre qualcosa come "2015-10-16 00:00:00 AM" invece di "2015-10-16"
Tuttavia, poiché usi ParseExact , l'input per dateBuy2 deve anche essere nel formato "aaaa-MM-gg" che vanifica lo scopo. Potresti prendere in considerazione l'utilizzo di DateTimePicker in modo da poter controllare il formato di input.
In alternativa, puoi utilizzare DateTime.Parse o TryParse (come suggerito da Martheen) invece, qualcosa del genere
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Se l'input deve essere nel TextBox è meglio che metti try-catch per evitare che il tuo programma si arresti in modo anomalo per aver ricevuto input formattati in modo errato se usi Parse .
Dove come se usassi TryParse puoi inserirlo in if-else block invece
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
}
Per ottenere CultureInfo enum devi aggiungere un riferimento a System.Globalization
[Modificato su suggerimento del Sig. Soner Gonul]