У меня есть таблица, в которую я хочу вставить данные только однажды в день
и чтобы реализовать это, я хочу проверить, существует ли уже текущая дата в
базу данных, написав эти строки
DateTime date = DateTime.Now;
MySqlCommand cmd = new MySqlCommand("SELECT * FROM `attendances` WHERE
`lecture_id` = '" + lecture_id + "' " +
" AND `date` = '"+date.ToShortDateString()+"' ",con);
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
MessageBox.Show("you can't insert");
else MessageBox.Show("you can insert");
Дата вставляется в базу данных в этом формате xxxx-xx-xx, хотя используется тот же метод для вставки, и date.ToShortDateString() возвращает дату в этом формате
xxxx/x/x .
DATE function in sql but that didn't work either.
@RaymondNijland Вы правы, я использовал подготовленные операторы в своей программе, но это было только для проверки правильности условия, спасибо, что указали на это.





Просто примените формат string date = DateTime.Now.ToString("yyyy-MM-dd")
И не вызывайте ToShortDateString() в своем SQL-запросе
Вы также должны использовать SqlParameter, так как ваш код уязвим для атаки SQL-инъекцией.
Вы также можете избежать использования .NET DateTime и вместо этого использовать MySql NOW() или UTC_DATE() в своем запросе, что может быть лучше; если регион вашего кода и БД находятся в разных часовых поясах.
то есть
[...] " AND `date` = DATE(NOW()) ",con);
C# поддерживает подготовленные операторы, я советую вам их использовать. Также является ли эта программа общедоступной? Если это так, вам не следует жестко кодировать пользователя/пароль MySQL в приложении из-за существующих декомпиляторов
.NET, которые можно использовать, тогда у них есть ваше имя пользователя и пароль MySQL.