не удается прочитать из MYSQL

Я хочу отобразить общее количество P_IN на основе dateTimePicker в моей форме окна в Visual Studio 2010, но его получение ошибки, где программа не может прочитать данные из MySQL.Ниже приведен мой код.

cmd = new MySqlCommand("SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = '" + dateTimePicker1.Text + "'", con);
                      MySqlDataAdapter sdaa = new MySqlDataAdapter(cmd);
                      DataSet dataa = new DataSet();
                      sdaa.Fill(dataa, "Database.CounterDb");
                      reader = cmd.ExecuteReader();
                      int sum = 0;
                       while (reader.Read())
                        {

                             sum = reader.GetInt32(1) + sum;

                          }
                          LCounter.Text = sum.ToString();

1 ответ

  1. этот код действительно опасен,
    не следует добавлять вводимые пользователем данные непосредственно в запрос
    не использовать

    cmd = new MySqlCommand("SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = '" + dateTimePicker1.Text + "'", con);
    

    пользовательский ввод может нарушить запрос, текстовый формат даты не может быть в правильном формате

    используйте это (замените формат даты на ваш):

    DateTime dt = DateTime.ParseExact(dateTimePicker1.Text, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
       MySqlCommand cmd = new MySqlCommand();
       cmd.Connection = con;
       cmd.CommandText = "SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = @dt";
       cmd.Prepare();
       cmd.Parameters.AddWithValue("@dt", dt);
    

    Иначе, если вам нужно искать в диапазоне, например 2016-02-20 00:00:00 — 2016-02-20 23:59:59, вы должны запросить все записи в эту дату:

    DateTime dt = DateTime.ParseExact(dateTimePicker1.Text, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture).Date;
    DateTime dt1 = dt.AddDays(1);
    cmd.CommandText = "SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE > @dt and DATE <@dt1";
    cmd.Prepare();
    cmd.Parameters.AddWithValue("@dt", dt);
    cmd.Parameters.AddWithValue("@dt1", dt1);