如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符

Posted

技术标签:

【中文标题】如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符【英文标题】:How to use LIKE operator with wildcards in query in MS-Access using c# 【发布时间】:2011-08-06 16:53:55 【问题描述】:

我在我的 C# 应用程序中使用 MS Access 数据库,我需要在其中传递类似参数化的查询。我看到各种文件说我们可以使用“*”或“?”作为通配符。但是当我尝试将它添加到我的查询中时,它会抛出异常。

实际上 MSAccess 以这种格式使用... LIKE "United" 这里双引号是强制性的。 但是作为我的 C# 代码中的字符串,我无法在运行时创建 "。如果我使用" 在我的字符串中不止一次出现红色波浪。

所以我需要一种方法来使用支持通配符的查询。

我的字符串是这个

SELECT student.roll_no, student.s_name, fee.fee_date, (fee.adm_fee+fee.mon_fee+fee.lib_fee+fee.exm_fee) AS fee, class.c_name
FROM class
INNER JOIN (fee INNER JOIN student ON fee.s_id = student.s_id) ON (fee.c_id = class.c_id) AND (class.c_id = student.c_id)
WHERE student.s_name Like ""\""*" + name + "\"*";

我希望我的命令文本中的类似条件为... WHERE student.s_name Like "*xyx*"

【问题讨论】:

不确定这是否有帮助,但在您的代码中,您可以通过在前面添加反斜杠将" 放入 C# 中的字符串中。 "\"" 是一个仅由 " 组成的字符串。 你能发布你的代码吗? 我认为它需要更像这样 - Like \"*"+name+"*\""; 您使用哪些通配符取决于您用于查询 Access/Jet/ACE 数据库的数据接口。如果您使用的是 DAO 或 ODBC,是的,您使用传统的 Access */? 通配符。但如果您使用 OLEDB,则使用 SQL 92 通配符 %/_。如果要编写 SQL 89 模式和 SQL 92 模式下的 Access 都可以理解的部分匹配的 SQL,可以使用专有的 ALIKE 运算符(“ANSI LIKE”),它使用 ANSI 92 通配符。 见this answer。 【参考方案1】:

我认为您可能只是字符串中的格式不正确(当然,这是假设您收到 SQL 异常,因为您没有提及有关异常的任何详细信息 :))

string commandtext =@"SELECT student.roll_no, student.s_name, fee.fee_date, (fee.adm_fee+fee.mon_fee+fee.lib_fee+fee.exm_fee) AS fee, class.c_name FROM class INNER JOIN (fee INNER JOIN student ON fee.s_id = student.s_id) ON (fee.c_id = class.c_id) AND (class.c_id = student.c_id) WHERE student.s_name Like \"*"+name+"*\"";

【讨论】:

以上是关于如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 代码中的 ms-access 中执行查询?

如何在 C# 中更新或刷新与 Ms-access 连接的数据网格视图

如何将 MS-Access 选择查询的结果保存在 C#.net 中的变量中?

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

在 C# COM-DLL 项目中使用外部 DLL 用于 MS-Access 使用

C# Ms-access 从数据库中获取详细信息