使用参数比较数据库中的日期

时间:2010-05-20 13:03:57

标签: c# ms-access datetime parameters date-format

string queryString = "SELECT SUM(skupaj_kalorij)as Skupaj_Kalorij  "
                + "FROM (obroki_save LEFT JOIN users ON obroki_save.ID_uporabnika=users.ID)"
                + "WHERE (users.ID= " + a.ToString() + ") AND (obroki_save.datum= @datum)";

            using (OleDbCommand cmd = new OleDbCommand(queryString,database))                                    
                {
                    DateTime datum = DateTime.Today;
                    cmd.Parameters.AddWithValue("@datum", datum);
                }
            loadDataGrid2(queryString);

我现在尝试使用参数。但我真的不知道如何正确地做到这一点。我试过这样,但参数数据没有得到任何值(根据c#)。

3 个答案:

答案 0 :(得分:3)

请试试这个:

database = new OleDbConnection(connectionString);
                database.Open();
                date = DateTime.Now.ToShortDateString();
                string queryString = "SELECT SUM(skupaj_kalorij)as Skupaj_Kalorij  "
                    + "FROM (obroki_save LEFT JOIN users ON obroki_save.ID_uporabnika=users.ID)" 
                    + "WHERE users.ID= " + a.ToString()+" AND obroki_save.datum= '" +DateTime.Today.ToShortDateString() + "'";
                loadDataGrid2(queryString);

当您使用Date时,您必须像这样写

select * from table where date = '@date'

不喜欢

select * from table where date = @date

答案 1 :(得分:1)

虽然发布错误通常很有用,但我会冒险猜测您的日期会出现转换错误。

你应该真正考虑参数化你的查询...

您应该阅读:http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

如果您无法阅读,请尝试将'a'变量更改为'1; DROP TABLE obroki; - '(但只有在备份数据库之后)。

答案 2 :(得分:0)

也许您需要在您正在使用的数据库的SQL方言中编写SQL字符串。在Jet / ACE SQL(Access使用的内容)中,日期值的分隔符是#,所以你需要这个:

  obroki_save.datum= #" +DateTime.Today.ToShortDateString() + "#"

当然,有些数据接口库会为您翻译这些内容,因此这可能不是问题所在。