2015-08-15 79 views
0

我的數據表如下數據表.NET 2.0中選擇雙單引號也不返回結果

DataTable ex= new DataTable(); 
ex.Columns.Add("Object"); 
ex.Columns.Add("Found"); 

ex.Rows.Add("vase''s","True"); 

string keyword="vase''s"; 

DataRow [] drs = ex.Select("[Object] like '%" + keyword + "%'"); 

DRS總是空的,我以同樣嘗試我有相同的結果,我已經在測試其他框架我也一樣 我的選擇語句有什麼問題?!

更新 我意識到,這是因爲單引號被視爲一個查詢語句,但我該怎麼做,在一個通用的方法

+0

'keyword.Replace( 「'」, 「 ''」)'? –

+0

無論如何,因爲我不想調用替換功能,如果沒有單引號,它會花費我一張支票 – user690069

+0

執行該檢查將花費更多的代價,而不是反正更換它 –

回答

0

搜索修改你的代碼像下面

 DataTable ex = new DataTable(); 
     ex.Columns.Add("Object"); 
     ex.Columns.Add("Found"); 

     ex.Rows.Add("vase's", "True"); //don't escape here 

     string keyword = "vase''s"; 
     //Use a equal to comparison rather than using LIKE operator 
     DataRow[] drs = ex.Select("[Object] = '" + keyword + "'"); 
0

表中的字符串值實際上有兩個單引號。您不會在C#字符串中轉義單引號。 Select語句只需要兩個單引號來告訴解析器,該引用不是常量字符串值的結尾。所以,無論是保持一個單引號中的值:

ex.Rows.Add("vase's", "True"); 

或兩個單引號搜索字符串:

string keyword = "vase''''s"; 
0

當您添加了DataRow,你通知vase''s值(有兩個單引號)和你(可能)不需要它。

但是你必須逃避它在查詢,如下圖所示:

DataTable ex = new DataTable(); 
ex.Columns.Add("Object"); 
ex.Columns.Add("Found"); 
ex.Rows.Add("vase's", "True"); 

foreach (DataRow row in ex.Rows) 
    Console.WriteLine(row["Object"]); // "vase's" 

string keyword = "vase's"; 
DataRow[] drs = ex.Select("[Object] like '%" + keyword.Replace("'", "''") + "%'"); 
Console.WriteLine("{0} rows found", drs.Length);