我的任务是使用"在类似的"中搜索MySQL数据库。在存储过程中。我的where子句作为参数传递给MySQL。
QA创建了一个名为" Fak& n& "帐户/ \家居&#34 ;.使用较短的字符串直到斜杠工作正常。一旦在搜索中使用反斜杠,它就不起作用。
我没有问题地逃过单引号。
除了" \"我已成功逃脱了所有事情。
在VS2012的调试中,我看到我的字符串变量为string name1 = name.Replace(@"\", @"\\"); yields "Fak'n & \" account/\\\\home"
此时我尚未处理单引号。此外,C#已经做了一些逃避。
试验我发现我需要5个反斜杠让MySQL在同样的声明中对它感到满意。我似乎无法让C#接受奇数的斜线。
public DataTable findAllLookup(string name, int sortOrder = 1)
{
string whereVal = "";
if (name.Length > 0)
{
//Don't let apostrophy's through you
string name1 = name.Replace(@"\", @"\\");
string name2 = name1.Replace("'", @"\'");
whereVal = whereVal + " and CustNam like '%" + name2 + "%'";
}
DataTable dt = new DataTable();
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
MySqlDataAdapter da = new MySqlDataAdapter("sp_a1cust_list_lookup_custom", conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new MySqlParameter("pmCompany", Company));
da.SelectCommand.Parameters.Add(new MySqlParameter("pmWhereVal", whereVal));
da.SelectCommand.Parameters.Add(new MySqlParameter("pmSort", sortOrder));
DataSet ds = new DataSet();
da.Fill(ds, "a1cust");
dt = ds.Tables["a1cust"];
return dt;
}
我尝试了替换功能中我能想到的每一个变化。我甚至手动插入一个反斜杠但是自动转义然后我有6个反斜杠。这是我停下来的功能。
{{1}}
非常感谢任何帮助。