2013-07-19 18 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

關於您的編譯錯誤:反斜槓轉義下面的引號,因此字符串文本不會被識別爲關閉。以下字符)和;對於字符串文字是有效的,但是結尾(換行符)不是。因此錯誤。