[英]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.