2013-07-19 26 views
17

我正在写一个C#代码,我从中获取数据库中的值并使用它。 我面临的问题如下。新行不断的错误

如果我从数据库中获取价值是:

string cat1 = "sotheby's"; 

现在在使用这种猫我想单引号前插入转义字符,来实现这一点,我已经写了下面的代码:

string cat1 = "sotheby's"; 
        if (cat1.Contains("'")) { 
         var indexofquote = cat1.IndexOf("'"); 
         cat1.Insert(indexofquote-1,"\"); 
         var cat2 = cat1; 
        } 

插入行中的错误上升,反斜杠(转义字符)。错误是常量中的新行。 请帮我解决这个错误。

+0

那么你需要像''\\'''或将其改为'@“\”' – V4Vendetta

+1

注意:有一个很好的机会,正确的解决方案是使用现有的JSON序列化将更可靠地转义字符用于JavaScript/Web服务... –

+1

无论这个字符串在哪里,几乎可以肯定已经建立的解决方案比手动转义字符更好。 –

回答

29

你不能只写"\"在C#代码。这将产生“新常数”错误,因为它'逃脱'第二个报价,所以它不计算在内。而字符串没有关闭。

二者必选其一"\\"(逃避\与本身)
或使用@"\"(逐字字符串)。

0

这只会替换1个单引号。 让他们都使用:

string cat1_escaped = cat1.Replace("'", "\'"); 

虽然很多数据库没有逃脱这样的报价,而是由他们加倍:

string cat1_escaped = cat1.Replace("'", "''"); 
+0

不要忘了逃避反斜杠;) – nodots

1

反斜杠在字符串中是转义字符,所以它必须被转义本身:

"\\" 

或者你可以使用一个所谓的逐字字符串:

@"\" 

参见: http://msdn.microsoft.com/en-us/library/aa691090.aspx

关于您的编译错误:反斜杠转义下面的引号,因此字符串文本不会被识别为关闭。以下字符)和;对于字符串文字是有效的,但是结尾(换行符)不是。因此错误。