2012-01-18 106 views
4

我正在使用.NET(C#)代碼寫入與Perl應用程序接口的數據庫。當一個單引號出現在一個字符串中時,我需要「逃避」它。 IOW,名稱O'Bannon應該轉換爲O\'Bannon作爲數據庫UPDATE。但是,字符串操作(例如.Replace)的所有努力都會爲反斜線生成一個轉義字符,並最終以O\\'Bannon結束。C#字符串 - 創建未轉義的反斜槓

我知道它實際上是生成第二個反斜槓,因爲我可以讀取結果數據庫字段的值(即它不僅僅是字符串的IDE調試值)。

我怎樣才能得到輸出字符串中的單個反斜槓?

[R

+0

「我要‘逃離’它...爲數據庫更新。「 < - 你不應該使用*佔位符*嗎? – 2012-01-18 19:24:57

+0

使用@ sign var RepName = @「O \'Bannon」; – 2012-01-18 20:11:49

回答

5

嗯,我做了

"O'Bannon".Replace("'","\\'") 

和結果是

"O\'Bannon" 

這是你想要的嗎?

+0

當我把它放在VS中的立即數窗口中時,它返回「」O \\'Bannon「 – 2012-01-18 19:23:54

+1

@MikeHanrahan立即窗口以有效的文字形式顯示它,試試這兩個表達式:''\\」'和'「 \\「。Length'。另外,在Watch窗口中查看它,它應該是」raw「。但是,如果您使用它來使其對SQL」安全「,則有可能錯誤地* – 2012-01-18 19:26:26

+0

@MikeHanrahan:我在'C#Interactive'控制檯中使用'Dump'或'Console.WriteLine()'做了LinqPAD,結果如答案 – Tigran 2012-01-18 19:29:52

1

更好的一個變種分配給替代,這樣就可以檢查它,以及如果需要的話

var RepName = "O'Bannon"; 
var Repstr = RepName.Replace("'","\\'"); 
1

你也可以使用一個逐字字符串

s = s.Replace("'", @"\'");