You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:22:45