如何在C#中通过OLEDB在Access SQL通配符查询中使用文字下划线?

时间:2019-04-22 22:37:45

标签: c# sql ms-access oledb

首先,我一直在研究this related stack post,但是它无法解决我的问题。

当我在MS Access 365查询窗口中运行以下查询时,按预期获得了97条记录:

SELECT *
FROM Prices
WHERE OptionID Like '*_*'

我的目标是返回OptionID包含下划线的所有记录。成功。

当我在MS Access 365查询窗口中运行以下查询时,我按预期获得109,967条记录:

SELECT *
FROM Prices

只有97个OptionID中带有下划线,因此,如预期的那样,上述第一个查询中的where子句将记录集限制为97个记录。

这是棘手的地方。

当我在C#应用中运行此查询时,通过OleDb连接到Access:

SELECT *
FROM Prices
WHERE OptionID Like '*_*'

...我得到0条记录。原因是因为通配符时,通过OleDb的Access SQL必须使用%而不是*。因此,我这样做:

SELECT *
FROM Prices
WHERE OptionID Like '%_%'

...我得到109,967条记录。好像where clause被忽略了!我相信发生的是OleDb会将下划线解释为单字符通配符本身,因此没有进行过滤。

这就是我的问题摘要:我无法弄清楚如何(通过OleDb)告诉Access我要使用下划线作为文字而不是通配符,而该通配符用{{1}包围}中的通配符查询。怎么做? (我尝试使用%\转义下划线,但没有骰子。)

1 个答案:

答案 0 :(得分:2)

将下划线放在“字符范围”内,并用方括号定界。然后,Access将理解您希望将其视为文字下划线字符,而不是与任何单个字符匹配的ANSI 92模式(与OleDb一起使用)通配符。

WHERE OptionID Like '%[_]%'