Как отобразить запись с помощью условия WHERE

Я создаю приложение с использованием C# и MySQL. Таблица MySQL (tbl_sales) имеет четыре поля (sale_item, sale_qty, added_n and last_updated_on). Тип данных поля last updated_on - DateTime. Я хочу отображать записи в DataGridView в соответствии со следующим SQL. SELECT * FROM tbl_sales WHERE last_updated_on > = " + dateTimePicker1.Text;

У меня следующая ошибка You have and error in your SQL syntax; check the manual that corrosponds to yout MySQL server version for the right syntax to use near " at line 1

Я использовал следующий код C#

private void button1_Click(object sender, EventArgs e)
    {
        string query;
        try
        {
            conLocal.Open();
            query = "SELECT * FROM tbl_sales WHERE last_updated_on > = " + textBox1.Text; // Convert.ToString(dateTimePicker1.Text);

            cmdLocal = new MySqlCommand();
            cmdLocal.Connection = conLocal;
            cmdLocal.CommandText = query;
            da = new MySqlDataAdapter();
            da.SelectCommand = cmdLocal;
            dt = new DataTable();
            da.Fill(dt);

            dataGridView1.DataSource = dt;

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        finally
        {
            da.Dispose();
            conLocal.Close();
        }
}

Как отобразить запись с помощью условия WHEREКак отобразить запись с помощью условия WHEREКак отобразить запись с помощью условия WHERE

Во-первых, вы должны использовать параметризованные запросы, чтобы избежать таких ошибок. Используйте параметризованный запрос и преобразуйте текст из datetimepicker в datetime и установите значение параметра с его помощью.

Chetan Ranpariya 15.05.2018 02:26

Возможный дубликат Каковы хорошие способы предотвратить SQL-инъекцию?

mjwills 15.05.2018 03:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вероятно, у вас должно быть текстовое значение даты и времени в одинарных кавычках. что-то вроде. Оператор синтаксического анализа вызовет исключение при недопустимых датах, поэтому обрабатывайте его соответствующим образом.

var lastUpdatedValue = DateTime.Parse(textBox1.Text);
var query = $"SELECT * FROM tbl_sales WHERE last_updated_on >='{lastUpdatedValue}'"

И последнее, но не менее важное: рекомендуемый подход - использовать параметризованные запросы вместо строк.

Я использовал приведенное выше предложение, он работает, но не отображает записи. Данные таблицы MySQL ссылка на сайт Без условия WHERE ссылка на сайт С условием WHERE ссылка на сайт

S.Sakthybaalan 15.05.2018 03:15

причина в том, что вы запрашиваете записи >= last_updated -> проверьте дату -> вы запрашиваете записи, обновленные после 15 мая, в то время как у вас есть записи, обновленные 13 мая или ранее. Таким образом, вам нужно либо изменить запрос на <=, либо указать соответствующую дату, например, 12 мая.

Jaya 15.05.2018 18:42
Ответ принят как подходящий

Как сказал Четан Ранпария, вы можете настроить параметр с типом данных MySqlDbType.DateTime для передачи значения даты в запрос следующим образом:

query = "SELECT * FROM tbl_sales WHERE last_updated_on >= @last_updated";

// conLocal is a MySqlConnection
using (var cmdLocal = new MySqlCommand(query, conLocal))
{
    cmdLocal.Parameters.Add("@last_updated", MySqlDbType.DateTime).Value = DateTime.Parse(dateTimePicker1.Text);

    // execute query & bind to DataGridView here
}

Если переданное строковое значение из средства выбора даты имеет предварительно заданное форматирование (например, yyyy-MM-dd HH:mm:ss), используйте DateTime.ParseExact при назначении значения параметра:

cmdLocal.Parameters.Add("@last_updated", MySqlDbType.DateTime).Value = DateTime.ParseExact(dateTimePicker1.Text, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

Я думаю, это немного для вставки кода, но мой выбирает запрос

S.Sakthybaalan 15.05.2018 06:38

Другие вопросы по теме