在 '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));
这将对 %
符号进行编码,以便在重定向发生后正确解析它。
我有一个查询从 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));
这将对 %
符号进行编码,以便在重定向发生后正确解析它。