[Тъй като не е добре да продължим в коментарите (коментарите ще са дълги), просто ще пусна какво мисля като решение тук]
За да форматирате dateBuy за формата, който искате, трябва също да поставите формата на низа в ToString()
Тоест вместо
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
сложи
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
В противен случай е възможно за ToString() да произведе нещо като "2015-10-16 12:00:00 AM" вместо "2015-10-16"
Въпреки това, тъй като използвате ParseExact , входът за dateBuy2 трябва също да бъде във формат "гггг-ММ-дд", което побеждава целта. Може да помислите да използвате DateTimePicker така че да можете да контролирате входния формат.
Като алтернатива можете да използвате DateTime.Parse или TryParse (както е предложено от Мартин) вместо това, нещо подобно
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Ако въвеждането трябва да бъде в TextBox по-добре сложете try-catch за да предотвратите срива на програмата ви поради приемане на грешно форматиран вход, ако използвате Parse .
Където сякаш използвате TryParse можете да го поставите в if-else вместо това блокировка
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
}
За да получите CultureInfo enum трябва да добавите препратка към System.Globalization
[Редактирано след предложение, дадено от г-н Сонер Гьонул]