2016-02-22 4 views
0

Извините за мой английский, это очень плохо.C# и MySql, выберите между двумя датами

private void loadDetalle() 
{ 
    DateTime today = DateTime.Today; 
    string todayS = today.ToString("yyyy/MM/dd"); 
    DateTime fechaComparativa = DateTime.Today.AddDays(-30); 
    string fechaComparativaS = fechaComparativa.ToString("yyyy/MM/dd"); 
    string queryDetalle30DiasIngresos = "select SUM(monto) from finanzas.ingresos WHERE fecha between " + fechaComparativaS + "and" + todayS; 
    executeQueryDetalle(labelIngreso30, queryDetalle30DiasIngresos); 
} 


private void executeQueryDetalle(Label Detalle, string query) 
{ 
    try 
    { 
     mcon.Open(); 
     mcd = new MySqlCommand(query, mcon); 
     object result = mcd.ExecuteScalar(); 
     Detalle.Text = Convert.ToString(result); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     mcon.Close(); 
    } 
} 

И проблема с этим заключается в следующем:

У Вас есть ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует версии сервера MYSQL для корректного синтаксиса использовать вблизи «» в строке 1

+0

Измените запрос на использование параметров, ошибка сообщает вам, в чем именно проблема. Там Query собирает '' 'как значение, которое вы передаете. Это проблема, когда люди не используют параметризованные запросы правильно и ваши 'и« должны быть »и« вам нужно пространство, наконец, выполните поиск в Google по следующему «MySQL - выберите данные из базы данных между двумя датами» – MethodMan

ответ

0

Я вижу 3 проблемы синтаксиса с запросом:

  1. Даты должны быть в формате гггг-мм-дд в MySQL, а не в/дд/гггг мМ.
  2. Даты должны быть заключены в одинарные кавычки ('), как если бы они были строкой.
  3. Между датами и оператором отсутствует пробел.

Таким образом, ваш код должен быть чем-то, как показано ниже:

private void loadDetalle() 
{ 
    DateTime today = DateTime.Today; 
    string todayS = today.ToString("yyyy-MM-dd"); 
    DateTime fechaComparativa = DateTime.Today.AddDays(-30); 
    string fechaComparativaS = fechaComparativa.ToString("yyyy-MM-dd"); 
    string queryDetalle30DiasIngresos = "select SUM(monto) from finanzas.ingresos WHERE fecha between '" + fechaComparativaS + "' and '" + todayS + "'"; 
    executeQueryDetalle(labelIngreso30, queryDetalle30DiasIngresos); 
} 

Если хранить даты как строки в формате, описанном inyour кода, даже тогда второй и 3-й точка применяются.

Однако самая большая проблема заключается в том, что вы используете конкатенацию строк для создания запроса вместо использования параметризованных запросов. Обратитесь к this SO topic за примером использования mysqlcommand с параметрами.