【问题标题】:datatable .net 2.0 select with double single quote returns no results带有双单引号的datatable .net 2.0选择不返回任何结果
【发布时间】:2015-11-08 21:49:26
【问题描述】:

我的数据表如下

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 我有相同的结果,我已经在其他框架中测试过我也一样 我的选择语句有什么问题?!

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

【问题讨论】:

  • keyword.Replace("'", "''") ?
  • 无论如何我都不想调用替换函数,如果没有单引号,我会花一张支票
  • 执行该检查要比更换它花费更多

标签: c# .net select datatable single-quotes


【解决方案1】:

当您添加 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);

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      修改你的代码如下所示

              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 + "'");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        相关资源
        最近更新 更多