2014-07-01 121 views
0

在我的應用程序中,用戶可以手動構建rowfiler。一個這樣的例子將是DataView Rowfilter - 將單引號包裹在單引號內

(Message LIKE '%'[Search]'%') OR (Message LIKE '%'[Search2]'%') 

我怎麼會逃避這個?目前我使用下面的函數來轉義括號和任何斜槓,但我需要在整個過濾器字符串內部轉義單引號的地方。

public static string CheckValue(string value) { StringBuilder sBuilder = new StringBuilder(); 

    string pattern = @"([-\]\[<>\?\*\\\""/\|\~\(\)\#/=><+\%&\^\'])"; 

    Regex expression = new Regex(pattern); 

    if (expression.IsMatch(value)) 
    { 
     foreach (char c in value) 
     { 
      switch(c){ 
       case '\\': 
        sBuilder.Append("\\"); 
        break; 
       case '[': 
        sBuilder.Append(@"[[]"); 
        break; 
       case ']': 
        sBuilder.Append(@"[]]"); 
        break; 
       default: 
        sBuilder.Append(c); 
        break; 
      } 
     } 
    } 
    return sBuilder.ToString(); 
} 

回答

0

逃逸單引號

sBuilder.Append(@"\'"); 
+0

這樣做,打破查詢,因爲它也逃脫的RowFilter引用的開始和結束。 –