c# - 如何在 c# 中通过 OLEDB 在 Access SQL 通配符查询中使用文字下划线?
问题描述
首先,我一直在研究这个相关的堆栈帖子,但它无法解决我的问题。
当我在 MS Access 365 查询窗口中运行以下查询时,我按预期获得了 97 条记录:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
我的目标是返回OptionID
包含下划线的所有记录。成功。
当我在 MS Access 365 查询窗口中运行以下查询时,我得到了 109,967 条记录,如预期:
SELECT *
FROM Prices
我的 OptionID 中只有 97 个有下划线,因此上面第一个查询中的 where 子句将记录集限制为 97 条记录,正如预期的那样。
这就是棘手的地方。
当我在我的 C# 应用程序中运行此查询时,通过 OleDb 连接到 Access:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
...我返回 0 条记录。原因是因为Access SQL via OleDb时必须使用通配符%
而不是。*
那么我这样做:
SELECT *
FROM Prices
WHERE OptionID Like '%_%'
...我得到 109,967 条记录。好像where clause
被忽略了!我认为正在发生的是 OleDb 将下划线解释为单字符通配符本身,因此不会发生过滤。
因此,总结一下我的问题:我无法弄清楚如何告诉 Access(通过 OleDb)我想将下划线用作文字而不是通配符,并被通配符查询包围%
。它是如何完成的?(我尝试用\
and转义下划线\\
,但没有骰子。)
解决方案
将下划线放在由方括号分隔的“字符范围”内。然后,Access 将了解您希望将其视为文字下划线字符,而不是作为匹配任何单个字符的 ANSI 92 模式(与 OleDb 一起使用)通配符。
WHERE OptionID Like '%[_]%'
推荐阅读
- c++ - 视觉工作室 2017 和 2019
- c# - TcpListener 在侦听来自 TcpClients 的传入消息时阻塞线程
- java - Java / Kotlin 在 for 循环中为 step + one 以及 if 条件之前的 step 在 for 循环中获取值
- flutter - Flutter/Dart - 适合卡片的动态字体大小
- c# - 无法从 c#.net 中指定的文本文件中读取
- mysql - 我应该使用 excel 还是在 MySQL 中创建自己的数据透视查询
- arrays - 在 vue js 视图中显示数组的数据
- java - 在没有 N+1 查询(批处理)的情况下选择 @OneToOne 实体?
- django - 如何在 Django 中检索超级用户的名称?
- java - 是否可以使 Spring Boot JPA Hibernate 应用程序自动创建具有来自 JPA 实体的必要列和关系的表?