C#查询无法执行

时间:2015-04-22 12:02:08

标签: c#

目前,我正在尝试检索名为“orders”的MySQL数据库中特定日期之间所有条目的内容。为此,我使用以下代码:

query = "SELECT id, date, contactinfo, orderinfo, contents, print_location, order_id, file_size FROM orders where date between " + dateFrom + " and " + dateTill + " and print_location like 'antw'";

dateFrom和dateTill都是包含时间戳的变量。

以上所有内容都非常完美。我现在面临的问题是我想检查两个print_locations而不是一个。如上面的代码所示,我只搜索'antw'。我现在要搜索两个print_locations的代码如下:

query = "SELECT id, date, contactinfo, orderinfo, contents, print_location, order_id, file_size FROM orders where date between " + dateFrom + " and " + dateTill + " and print_location like 'antw' or print_location like 'helm'";

但不知怎的,这不起作用。我没有得到错误表单只是冻结并使其无法访问。

这可能是一个需要解决的简单问题,但我似乎无法解决它。我之所以只显示查询变量的值而不是我的其余代码,是因为一切都运行了好几周。

4 个答案:

答案 0 :(得分:2)

你忘了括号,你应该使用参数来避免注射攻击

string Command = "SELECT id, date, contactinfo, orderinfo, contents, print_location, order_id, file_size FROM orders where date between @dateFrom  and @dateTill and (print_location like 'antw' or print_location like 'helm')";
using (MySqlConnection myConnection = new MySqlConnection(ConnectionString))
{
    using (MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(Command, myConnection))
    {
        myDataAdapter.SelectCommand.Parameters.Add(new MySqlParameter("@dateFrom", yourDateFrom));
        myDataAdapter.SelectCommand.Parameters.Add(new MySqlParameter("@dateTill", yourdateTill));
        DataTable dtResult = new DataTable();
        myDataAdapter.Fill(dtResult);
    }
}

答案 1 :(得分:1)

为您的逻辑添加括号:

query = "SELECT id, date, contactinfo, orderinfo, contents, print_location, order_id, file_size FROM orders where date between " + dateFrom + " and " + dateTill + " and (print_location like 'antw' or print_location like 'helm')";

虽然小心......这闻起来像SQL注入的潜在案例!

答案 2 :(得分:1)

从未使用过MySQL,但也许您忘记了LIKE条款中的%%。它的方式,它将像=一样工作。

SELECT id, date, contactinfo, orderinfo, contents, print_location, order_id, file_size FROM orders where date between " + dateFrom + " and " + dateTill + " and (print_location like '%antw%' or print_location like '%helm%')

答案 3 :(得分:1)

你的第二组需要括号"或"条件:

query =" SELECT id,date,contactinfo,orderinfo,contents,print_location,order_id,file_size FROM order in date between" + dateFrom +"和" + dateTill +" (print_location喜欢' antw'或print_location喜欢' helm')&#34 ;;

否则,您的陈述如下:

获取所有这些内容,即此日​​期与此日期之间的日期,以及print_location,例如' antw' ...

或者告诉我所有这些东西,其中print_location喜欢' helm'。

由于您使用了类似的功能,因此在执行查询时可能会冻结。它最终会完成,而且你的结果会超出你的期望。

另外,由于注入问题和数据建模,您应该真正使用数据访问对象模型(DAO)。我建议研究它!