代码之家  ›  专栏  ›  技术社区  ›  Maximus Decimus

具有单引号冲突的DataTable选择方法C#

  •  7
  • Maximus Decimus  · 技术社区  · 11 年前

    我最近发现,当我在一个包含撇号的字段下进行LINQ选择时,它会使我的应用程序抛出异常。

    DataRow[] newDr = this.ds.Tables["TableName"].Select("Name = '" + drData["Name"].ToString() + "'");
    

    如果drData[“Name”]=“企业的钱”

    I got an exception of "Syntax error: Missing operand after 'S' operator "

    有人能告诉我如何保存它,而不是更换或移除它吗?

    2 回复  |  直到 11 年前
        1
  •  22
  •   King King    11 年前

    你必须将单引号转义为2个单引号,可能还有其他特殊字符,所以你必须注意它们:

    DataRow[] newDr = this.ds.Tables["TableName"]
                             .Select(string.Format("Name ='{0}'",drData["Name"].ToString().Replace("'","''")));
    

    有关对筛选器字符串中的特殊字符进行转义的更多示例(用于 Select 方法): Row filter string examples

        2
  •  7
  •   Community Mike Causer    7 年前

    它不是LINQ Select,而是 DataTable.Select 方法你得到的错误是因为性格 ' 需要用替身逃离 ' ' 。简单的方法是将其替换为:

    DataRow[] newDr = this.ds.Tables["TableName"]
                         .Select("Name = '" + drData["Name"].ToString().Replace("'", "''" + "'");
    

    你可以看到 this question 了解如何对DataTable中的字符进行转义。选择