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 总是空的我已经尝试过 equal 我有相同的结果并且我已经在其他框架中测试过我的选择语句也有什么问题?!

更新 我意识到这是由于单引号被认为是查询语句中的一个,但是我怎样才能以通用方式进行搜索

4

3 回答 3

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 + "'");
于 2015-08-15T23:45:13.100 回答
0

表中的字符串值实际上有两个单引号。您不能在 C# 字符串中转义单引号。该Select语句只需要两个单引号来告诉解析器引号不是常量字符串值的结尾。所以要么在值中保留一个单引号:

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

或搜索带有两个单引号的字符串:

string keyword = "vase''''s";
于 2015-08-15T23:52:46.817 回答
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);
于 2015-08-15T23:54:53.830 回答