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

带有单引号冲突的DataTable选择方法C#,c#,linq,select,datarow,apostrophe,C#,Linq,Select,Datarow,Apostrophe,我最近发现,当我在包含撇号的字段下执行LINQ select时,我的应用程序会抛出异常 DataRow[] newDr = this.ds.Tables["TableName"].Select("Name = '" + drData["Name"].ToString() + "'"); 如果drData[“名称”]=“企业的资金” 我遇到了一个异常“语法错误:在'S'运算符之后缺少操作数” 有人能告诉我如何保存它,而不是替换或删除它吗?您必须将单引号转义为2个单引号,可能还有其他特殊字符,因此

我最近发现,当我在包含撇号的字段下执行LINQ select时,我的应用程序会抛出异常

DataRow[] newDr = this.ds.Tables["TableName"].Select("Name = '" + drData["Name"].ToString() + "'");
如果drData[“名称”]=“企业的资金”

我遇到了一个异常“语法错误:在'S'运算符之后缺少操作数”


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

您必须将单引号转义为2个单引号,可能还有其他特殊字符,因此您必须处理它们:

DataRow[] newDr = this.ds.Tables["TableName"]
                         .Select(string.Format("Name ='{0}'",drData["Name"].ToString().Replace("'","''")));
有关对筛选器字符串中的特殊字符进行转义的更多示例(用于
Select
方法):
它不是LINQ Select,而是它的方法。您遇到的错误是由于字符
,您需要使用双
对其进行转义。简单的方法是将其替换为:

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

您可能会看到如何在DataTable中转义字符。选择

这是一个教科书示例,说明当您不清理用户输入fwiw时会发生什么,指的是确切地解释如何以及如何执行escape@lc.:输入没有问题。@siride从技术上讲,是的,输入没有“问题”,它很可能在有效输入的预期范围内(至少在设计端)。但是在查询中盲目地执行它会使这种看似无害的输入产生灾难性的影响。无论您如何分割它,您都需要注意字符串不包含任何可能被误解的字符,这是清理过程的一部分。这是否意味着完全不允许
字符、对它们进行编码或转义,完全取决于体系结构/业务设计。