目前,我正在尝试检索名为“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'";
但不知怎的,这不起作用。我没有得到错误表单只是冻结并使其无法访问。
这可能是一个需要解决的简单问题,但我似乎无法解决它。我之所以只显示查询变量的值而不是我的其余代码,是因为一切都运行了好几周。
答案 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)。我建议研究它!