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

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

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

如果drData [“姓名”] =“商家的钱”

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

任何人都可以告诉我如何保存它,不要更换它或删除它,好吗?

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

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

有关在filter字符串中转义特殊字符的更多示例(在Select方法中使用): 行filter字符串示例

它不是LINQ Select,而是它的DataTable.Select方法。 你得到的错误是由于字符' ,你需要用双倍' '来逃避它 。 简单的方法就是替换它:

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

您可能会看到有关如何在DataTable.Select中转义字符的问题

您可以尝试以下代码:

 string Name = EscapeSpecialCharacters(drData["Name"].ToString()); DataRow[] newDr = this.ds.Tables["TableName"].Select("Name = '" + Name + "'"); private static string EscapeSpecialCharacters(string Name) { StringBuilder sb = new StringBuilder(Name.Length); for (int i = 0; i < Name.Length; i++) { char c = Name[i]; switch (c) { case ']': case '[': case '%': case '*': sb.Append("[" + c + "]"); break; case '\'': sb.Append("''"); break; default: sb.Append(c); break; } } return sb.ToString(); }