在 'Like' 运算符的字符串中使用 %ad 来过滤查询结果

Using %ad in a string for 'Like' operator to filter query results

我有一个查询从 mssql 服务器上的数据库中检索一些信息,如下所示:

String sql = "select Name from Projects where Name NOT IN (select Project_Name from vDays) and Name like @filterText order by Name";

我有一个文本框,允许用户在文本之前、之后或周围使用 % 符号时输入一些文本以过滤按名称编辑的项目 return。这工作正常,除非用户输入以 %ad 开头的任何内容。发生这种情况时,调试器(使用 VS2010)将文本显示为 。这当然会传递到查询中,并且 return 没有正确的信息。

我进行了大量谷歌搜索,但找不到 %ad 转换为 的任何原因。到目前为止,所有其他查询都运行良好。

更新:

好的,所以当我使用 Response.Redirect 转到另一个页面并发送文本框值时,就会发生变化。

filterText = FilterTextBox.Text;
Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText);

filterText 正确显示 %ad

然后在下一页:

string filterText = "";
filterText = Request.QueryString["filterText"];

filterText 显示

正如@DavidT.Macknet在评论中所说,这似乎是因为URL编码。有没有办法在不编码的情况下保留这些 % 符号?如果没有,我可以随时更改它,以便用户输入 *,然后在查询发生之前将所有 * 替换为 %

你需要对行filterText进行编码

Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText);

使用 uri 编码。使用 Uri.EscapeDataString, it is more reliable 比使用 HttpUtility.UrlEncode 更好,这是您将看到的大多数代码示例使用的工具。

Response.Redirect("UnusedProjects_Results.aspx?filterText=" + Uri.EscapeDataString(filterText));

这将对 % 符号进行编码,以便在重定向发生后正确解析它。