2014-12-15 3 views
-1

Я пытаюсь выполнить простой выбор, но он не работает должным образом, я использовал тот же метод с другой таблицей и отлично работал, единственное отличие заключается в том, что в другом методе вместо этого был только один параметр из 3.C# MySql-запрос не возвращает значение

Метод:

public List<Quilometragem> SelectKM(string placa, string startDate, string endDate, string query) 
{ 
    MySqlDataReader rdr = null; 

     List<Quilometragem> result = new List<Quilometragem>(); 

     Connect(); 

     try 
     { 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.Connection = m_conn; 
      cmd.CommandText = query; 


      cmd.Parameters.AddWithValue("@placa", placa); 
      cmd.Parameters.AddWithValue("@startdate", startDate); 
      cmd.Parameters.AddWithValue("@enddate", endDate); 

      cmd.Prepare(); 

      rdr = cmd.ExecuteReader(); 


      while (rdr.Read())//Enquanto existir dados no select 
      { 
       Quilometragem cc = new Quilometragem(); 

       cc.id = rdr["id"] == null ? 0 : Int32.Parse(rdr["id"].ToString()); 

       cc.placa = rdr["Placa"] == null ? "" : rdr["Placa"].ToString(); 
       cc.kmtrab = rdr["kmtrab"] == null ? 0 : Double.Parse(rdr["kmtrab"].ToString()); 
       cc.kmpos = rdr["kmpos"] == null ? 0 : Double.Parse(rdr["kmpos"].ToString()); 

       cc.date = rdr["date"] == null ? DateTime.MinValue : DateTime.Parse(rdr["date"].ToString()); 

       result.Add(cc); 
      } 

      rdr.Close(); 
      Close(); 

      return result; 
     } 
     catch (Exception e) 
     { 
      log.Error(e); 
     } 
     finally 
     { 
      rdr.Close(); 
      Close(); 
     } 
     return null; 
    } 

Запрос:

public static string SELECT_KM = "SELECT placa, kmtrab, kmpos " + 
         "FROM serede_quilometragem " + 
         "WHERE placa='@placa' AND CAST(DATE AS DATE) BETWEEN '@startdate' AND '@enddate' " + 
         "GROUP BY placa; "; 

Это работает на MySQL Workbench

+0

'WHERE placa = '@ placa'' не делает того, чего вы ожидаете. Аналогично другим параметрам, также в кавычках. Смотри внимательно. В будущем, пожалуйста, сообщите нам, что именно * происходит * и что вы ожидали, а не просто сказать, что что-то не работает. –

+0

Вы не должны указывать свои параметры. Тогда они будут восприниматься как литералы. Используйте '@ startDate' вместо' '@ startDate'' и т. Д. –

ответ

0

Вы, вероятно, не должны добавлять котировки в @params. Таким образом, запрос должен гласить:

public static string SELECT_KM = "SELECT placa, kmtrab, kmpos " + 
         "FROM serede_quilometragem " + 
         "WHERE [email protected] AND CAST(DATE AS DATE) BETWEEN @startdate AND @enddate " + 
         "GROUP BY placa; "; 

Если вы используете '@param', он интерпретируется как литературные строки.

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