【问题标题】:How can I escape the ampersand in a sql query from WebMatrix?如何在 WebMatrix 的 sql 查询中转义 & 符号?
【发布时间】:2013-03-27 13:30:05
【问题描述】:

我正在尝试在 WebMatrix 中查询数据库,我已经做了几次,只是这一次,我发现供应商列中的一些字段包含 & 符号。我查看了几篇文章,但没有人从 WebMatrix 的角度攻击这个解决方案(实际上,根本没有一个真正解决直接问题,而是针对特定环境的变通方法)。

我还尝试了几件事,包括 C# 的 Replace 方法(虽然,我从来没有得到一个明确的例子来说明我应该用什么替换 &带有反斜杠(显然这不起作用)。

理想的情况是 sql 环境本身中的转义字符,但是,afaik,不存在这样的转义字符。我应该用什么替换以下查询以返回其字段包含&符号的行,如下所示:

SELECT vendor_id FROM vendors WHERE vendor_name = 'J & H Equipment'

即使 vendor_name 列包含的值(字符串)恰好是“J & H Equipment”,上述查询也不返回任何行

提到我正在参数化我的查询,所以实际的查询看起来像:

string selectQueryString = "SELECT ap_vendor_id FROM ap_vendors WHERE ap_vendor_name = @0";

var code = db.QueryValue(selectQueryString, searchString);

在这段代码之后,我只是将值写入页面(使用 razor,是的,我尝试过 Html.Raw(code) 和 @code),因为这是一个 AJAX 调用。

另外,下面是我在实际查询之前尝试运行的替换功能:

searchString = searchString.Replace("&", "\\&");

请注意,双反斜杠是必需的,因为“\”字符在 C# 中是转义字符,因此两个“\”在 C# 中等同于一个“\”。

--------------我的解决方案------ --------

对我来说,解决方案是在调用 AJAX 之前在我的 javascript 中使用 encodeURIComponent(我确信现在很清楚,我已经很久没有使用 AJAX了)。

【问题讨论】:

  • 请贴出你用来查询数据库的代码。
  • 如果可能的话,请将前端代码和整个方法贴在code-behind/Controller中,以便我们看看发生了什么。

标签: c# sql-server-ce webmatrix


【解决方案1】:

解决方案是在AJAX调用之前在javascript中使用encodeURIComponent。

【讨论】:

  • 我正在使用参数化查询。我不想将其添加到我的帖子中,因为我认为这会让某些人感到困惑。它实际上看起来像SELECT vendor_id FROM vendors WHERE vendor_name = @0
  • 另外,我已经尝试过您的解决方案,正如我在我的问题中发布的那样,但我会再试一次(将 @0 括在单引号中并用“\&”替换与号,并且不包装@0 在单引号中并做同样的事情)
  • @VoidKing:你应该提到这样的事情!我只是想写一个评论...这是非常相关且非常重要的信息!
  • 请贴出您用来查询数据库的代码。这会有所帮助。
  • @Rob 我已经尝试了您在回答中描述的两种解决方案。既不工作也不返回任何行。
猜你喜欢
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2015-09-23
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多