DataTable筛选含撇号的designername字段时出现语法错误如何解决?
解决DataTable筛选时含撇号字段的语法错误问题
错误原因
你直接通过字符串拼接生成筛选条件的方式存在语法漏洞:当strDesigner的值包含单引号(比如Men's Jewelry),最终生成的筛选表达式会是designername = 'Men's Jewelry'。DataTable的表达式解析器会把Men后面的单引号识别为字符串结束标记,剩余的s Jewelry'就成了无效语法,因此抛出Syntax error: Missing operand after 's' operator的错误。
解决方案
方案一:转义单引号
在拼接筛选条件前,将strDesigner中的单引号替换为两个连续单引号(DataTable表达式中用双单引号转义单个单引号),示例代码:
// 先转义单引号 string escapedDesigner = strDesigner.Replace("'", "''"); // 生成筛选表达式 DataRow[] dr = dtCollections2.Select($"designername = '{escapedDesigner}'");
或者直接在拼接时处理:
DataRow[] dr = dtCollections2.Select("designername = '" + strDesigner.Replace("'", "''") + "'");
方案二:使用LINQ查询(更推荐)
放弃字符串拼接的筛选方式,改用LINQ直接过滤DataRow集合,避免语法转义问题,同时代码可读性更强:
DataRow[] dr = dtCollections2.AsEnumerable() .Where(row => row.Field<string>("designername") == strDesigner) .ToArray();
如果designername字段可能为DBNull,需要先判断非空:
DataRow[] dr = dtCollections2.AsEnumerable() .Where(row => !row.IsNull("designername") && row.Field<string>("designername") == strDesigner) .ToArray();
内容的提问来源于stack exchange,提问作者Naw
相关产品推荐
相关产品推荐

