[英]MySql Where Clause Parameter
MySqlCommand command = new MySqlCommand("
select *
from singlecustomer
where name like concat ('%',@search,'%')
or code like concat ('%',@search,'%')
or id like concat ('%',@search,'%')", con);
command.Parameters.Add(new MySqlParameter("@search", "%"+sc.sc_SearchBox.Text+"%"));
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = command;
DataTable dt = new DataTable();
adapter.Fill(dt);
sc.dgClientLog.DataSource = dt;
这是验证搜索是否成功的方法。
SearchClientDataGrid(sc);
if (sc.dgClientLog.Rows.Count == 0)
{
sc.NoItemFoundLabel.Visible = true;
sc.NoItemFoundLabel.BringToFront();
return;
}
else
{
sc.NoItemFoundLabel.Visible = false;
}
它可以工作,但是每当我以字符“%”开头搜索时,例如:%David,它仍然有效,有没有办法删除 %? 我最近在学习 MySql 参数以避免 Sql 注入。 它只是让我觉得 % 确实有效,而不是返回 no found。
为此,您必须使用 mysql 转义字符\
转义%
字符引用。 然后它将不再被视为特殊字符。
所以解决方案是
string search = "%" + sc.sc_SearchBox.Text.Replace("%", @"\%") + "%";
command.Parameters.Add(new MySqlParameter("@search",search));
可能您应该查看引用的表并处理其他特殊字符_
这也是LIKE
搜索使用的通配符。 另一个 escaping 由 mySQLParameter 处理。 例如,以下将"
变为\"
(使用参数时在内部应用MySqlHelper.EscapeString
)
string result = MySqlHelper.EscapeString("foo\"bar");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.