2013-03-27 42 views
2

我试图在WebMatrix中查询一个数据库,我做了好几次,只有这一次,我发现供应商栏中的一些字段包含&符。我浏览过几篇文章,但没有一篇从WebMatrix的角度攻击这个解决方案(实际上,没有一个真正解决直接问题,而是针对该特定环境解决问题)。我已经尝试了几件事情,包括C#的替换方法(尽管我从来没有能够得到一个清楚的例子,我应该用什么替代&符号,如果有任何东西存在作为合适的替代品),并逃脱与反斜杠符号(显然这不起作用)。如何从WebMatrix中的sql查询中跳出&符号?

什么是理想的是sql环境本身的转义字符,但是,afaik不存在这样的转义字符。我应该代替下面的查询与返回行的字段中包含&符号,就像这样:

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

上述查询返回即使VENDOR_NAME列包含的值(字符串)没有行,这正是“Ĵ&^h设备”

它剥开提的是,我在参数化我的疑问,所以实际的查询看起来像:

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

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

此代码后,我简单地写值到页面(剃刀,是的,我有试过Html .Raw(code)和@code),因为这是一个AJAX调用。

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

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

注意,作为“\”字符是在C#中的转义字符的双反斜线是必要的,所以两个“ '在C#中等同于'\'。

-------------------------- MY SOLUTION ------------------ ---------

对我来说,解决的办法是在AJAX调用之前在我的javascript中使用encodeURIComponent(我确信现在清楚,我没有长时间使用AJAX )。

+0

请发布您用于查询数据库的代码。 – Rob 2013-03-27 13:38:55

+0

如果可能,请在代码隐藏/控制器中发布前端代码和整个方法,以便我们看到发生了什么。 – Rob 2013-03-27 14:00:18

回答

3

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

+0

我正在使用参数化查询。我不想将其添加到我的文章中,因为我认为它会让一些人感到困惑。它实际上看起来像'SELECT vendor_id FROM vendor WHERE vendor_name = @ 0' – VoidKing 2013-03-27 13:35:59

+0

另外,我试过你的解决方案,因为我在我的问题中发布了,但我会再试一次(用单引号包装@ 0并用' \',并且没有用单引号将@ 0包裹起来并且做同样的事情) – VoidKing 2013-03-27 13:37:16

+0

@VoidKing:你**应该提到类似的东西!我只是想写一个评论来说明这个......这是非常重要的信息! – 2013-03-27 13:37:20