使用字符串中的%ad为“赞”运算符过滤查询结果

时间:2017-01-31 18:00:10

标签: c# asp.net sql-server visual-studio-2010

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

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

我有一个文本框,允许用户输入一些文本来过滤在文本之前,之后或周围使用%符号时按名称返回的项目。这种方法很好,除非用户输入以%ad开头的内容。发生这种情况时,调试器(使用VS2010)将文本显示为。这当然会传递给查询,但不会返回正确的信息。

我已经完成了一堆谷歌搜索,无法找到%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编码。有没有办法将那些%符号保留在那里而不进行编码?如果没有,我可以随时更改,以便用户输入*,然后在查询发生之前将所有*替换为%

1 个答案:

答案 0 :(得分:2)

您需要对行<{1}}进行编码

filterText

使用uri编码。使用Uri.EscapeDataString的好工具是使用more reliable,而不是使用Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText); ,这是您将看到的大多数代码示例所使用的内容。

HttpUtility.UrlEncode

这将对Response.Redirect("UnusedProjects_Results.aspx?filterText=" + Uri.EscapeDataString(filterText)); 符号进行编码,以便在重定向发生后正确解析。