C#和MySql,在两个日期之间选择

时间:2016-02-22 01:00:28

标签: c# mysql visual-studio-2013

对不起我的英语,这非常糟糕。

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行附近使用正确的语法

1 个答案:

答案 0 :(得分:0)

我发现您的查询存在3个语法问题:

  1. 日期应该是mysql中的yyyy-mm-dd格式,而不是yyyy / MM / dd。
  2. 日期应该用单引号(')括起来,就好像它们是一个字符串一样。
  3. 日期和运营商之间没有空格。
  4. 因此,您的代码应如下所示:

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

    如果您以您在代码中描述的格式将日期存储为字符串,即使这样,第2和第3点也适用。

    但是,最大的问题是您使用字符串连接来创建查询而不是使用参数化查询。查看this SO topic以获取有关将mysql命令与参数一起使用的示例。