[Dado que no es bueno si continuamos en los comentarios (los comentarios serán largos), solo pondré lo que pienso como una solución aquí]
Para formatear dateBuy al formato que desee, también debe poner el formato de cadena en ToString()
Es decir, en lugar de
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
poner
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
De lo contrario, es posible que ToString() para producir algo como "2015-10-16 12:00:00 AM" en lugar de "2015-10-16"
Sin embargo, dado que usa ParseExact , la entrada para dateBuy2 también debe tener el formato "yyyy-MM-dd", lo que anula el propósito. Puede considerar usar DateTimePicker de modo que pueda controlar el formato de entrada.
Alternativamente, puede usar DateTime.Parse o TryParse (según lo sugerido por Martheen) en su lugar, algo como esto
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 la entrada tiene que estar en el TextBox mejor pon try-catch para evitar que su programa se bloquee por tomar una entrada con formato incorrecto si usa Parse .
Donde como si usaras TryParse puedes ponerlo en if-else sentencia de bloque en su lugar
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
}
Para obtener CultureInfo enum necesita agregar una referencia a System.Globalization
[Editado después de la sugerencia dada por el Sr. Soner Gonul]