2016-05-01 4 views
0

Я хочу показать общее число P_IN на основе dateTimePicker в моей оконной форме в Visual Studio 2010, но его ошибка получения, когда программа не может читать данные из MySQL.Below - это мой код.невозможно прочитать с 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(); 
+0

"Database.CounterDb" это имя вашей таблицы? – CapeStar

+2

** ПРЕДУПРЕЖДЕНИЕ **: не забудьте использовать ** подготовленные заявления ** и не вставлять произвольные пользовательские данные в свои запросы. [Это не сложно сделать правильно] (http://bobby-tables.com/csharp.html) и избегает множества [уродливых побочных эффектов] (http://bobby-tables.com/). – tadman

+0

Да, это мое имя таблицы –

ответ

0

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

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); 

ELSE, если вам нужно искать в диапазоне, например 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); 
+0

Ошибка все тот же. все еще не может отобразить общее число P_IN –

+0

Я проверил с помощью окна сообщений, программа не может прочитать эту часть программы: sdaa.Fill (данные, «Database.CounterDb»); reader = cmd.ExecuteReader(); int sum = 0; в то время как (считыватель.Read()) { сумма = считыватель.GetInt32 (1) + сумма; } LCounter.Text = sum.ToString(); –

+0

loop reader.Read() найденные данные? каково конечное значение суммы? –

Смежные вопросы