2015-08-15 12 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); 
相关问题