如何在 C# 中通过 OLEDB 在 Access SQL 通配符查询中使用文字下划线?
How to use literal underscore in Access SQL wildcard query via OLEDB in c#?
首先,我一直在研究this related stack post,但一直没能解决我的问题
当我 运行 在 MS Access 365 查询 window 中执行以下查询时,我按预期获得了 97 条记录:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
我的 objective 是 return 所有 OptionID
包含下划线的记录。成功。
当我 运行 在 MS Access 365 查询 window 中执行以下查询时,我按预期获得了 109,967 条记录:
SELECT *
FROM Prices
我的 OptionID 中只有 97 个有下划线,因此上面第一个查询中的 where 子句将记录集限制为 97 个记录,正如预期的那样。
这就是它变得棘手的地方。
当我在我的 C# 应用程序中 运行 此查询时,通过 OleDb 连接到 Access:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
...我得到 0 条记录 returned。原因是因为通配符时通过 OleDb 访问 SQL 必须使用 %
而不是 *
。那么我这样做:
SELECT *
FROM Prices
WHERE OptionID Like '%_%'
...我得到了 109,967 条记录。好像 where clause
被忽略了!我相信正在发生的事情是 OleDb 将下划线解释为单字符通配符本身,因此没有发生过滤。
因此我的问题总结如下:我无法弄清楚如何告诉 Access(通过 OleDb)我想将下划线用作文字而不是通配符,包围通过 %
在通配符查询中。它是如何完成的? (我尝试用 \
和 \
转义下划线,但没有骰子。)
将下划线放在 "character range" 内,用方括号分隔。然后,Access 将理解您希望将其视为文字下划线字符,而不是作为匹配任何单个字符的 ANSI 92 模式(您与 OleDb 一起使用)通配符。
WHERE OptionID Like '%[_]%'
首先,我一直在研究this related stack post,但一直没能解决我的问题
当我 运行 在 MS Access 365 查询 window 中执行以下查询时,我按预期获得了 97 条记录:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
我的 objective 是 return 所有 OptionID
包含下划线的记录。成功。
当我 运行 在 MS Access 365 查询 window 中执行以下查询时,我按预期获得了 109,967 条记录:
SELECT *
FROM Prices
我的 OptionID 中只有 97 个有下划线,因此上面第一个查询中的 where 子句将记录集限制为 97 个记录,正如预期的那样。
这就是它变得棘手的地方。
当我在我的 C# 应用程序中 运行 此查询时,通过 OleDb 连接到 Access:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
...我得到 0 条记录 returned。原因是因为通配符时通过 OleDb 访问 SQL 必须使用 %
而不是 *
。那么我这样做:
SELECT *
FROM Prices
WHERE OptionID Like '%_%'
...我得到了 109,967 条记录。好像 where clause
被忽略了!我相信正在发生的事情是 OleDb 将下划线解释为单字符通配符本身,因此没有发生过滤。
因此我的问题总结如下:我无法弄清楚如何告诉 Access(通过 OleDb)我想将下划线用作文字而不是通配符,包围通过 %
在通配符查询中。它是如何完成的? (我尝试用 \
和 \
转义下划线,但没有骰子。)
将下划线放在 "character range" 内,用方括号分隔。然后,Access 将理解您希望将其视为文字下划线字符,而不是作为匹配任何单个字符的 ANSI 92 模式(您与 OleDb 一起使用)通配符。
WHERE OptionID Like '%[_]%'