C# 查询不返回任何内容

C# 查询不返回任何内容,c#,.net,sql,ms-access,oledbconnection,C#,.net,Sql,Ms Access,Oledbconnection,我正在尝试从数据库中获取一些结果,但查询失败 String sqlFindModel = "SELECT * FROM [PRODUCT] WHERE [PN] LIKE ('*" + textBox1.Text + "*')"; 当我修剪“WHERE[PN]LIKE…”部分时,效果很好。 当我替换为“=”并查找确切的值时,它就起作用了 我很困惑 PS-有趣的是,当直接在ACCESS中进行查询时,必须使用*;但当使用C#并连接到MS Access时,需要使用%。。。有趣 *不用于语句中的通配符

我正在尝试从数据库中获取一些结果,但查询失败

String sqlFindModel = "SELECT * FROM [PRODUCT] WHERE [PN] LIKE ('*" + textBox1.Text + "*')";
当我修剪“WHERE[PN]LIKE…”部分时,效果很好。 当我替换为“=”并查找确切的值时,它就起作用了

我很困惑


PS-有趣的是,当直接在ACCESS中进行查询时,必须使用*;但当使用C#并连接到MS Access时,需要使用%。。。有趣

*
不用于语句中的通配符-
%


但是,您不应该只是将代码更改为使用
%
——您应该修复代码,使其不易受到攻击。您应该改用参数化SQL。有关示例,请参阅文档。

尝试将*字符替换为%

考虑Access“未记录的
相似的
比较运算符”是否会使此操作更容易处理

"SELECT * FROM [PRODUCT] WHERE [PN] ALike '%" + textBox1.Text + "%'"
类似
信号访问“db引擎期望ANSI通配符(%and u)而不是*and?)。因此,无论您是在访问会话内运行查询,还是在使用OleDb的访问会话外运行查询,查询都可以同样工作


我看到过对
的反对意见,因为它不是标准的SQL。然而,在为其他db引擎调整访问查询时,我更喜欢将
相似
更改为
相似
,而不是必须更改*和?“使用参数2)%to%和u.

1)是LIKE运算符,而不是*请确保清除输入,否则恶意用户可能会通过sql注入攻击删除表或执行各种恶意代码。@Maciej手动清除sql输入在大多数情况下注定会失败。”。实际上,最好使用参数化查询或等效查询,而不必自己对其进行清理。实际上,您可以在access本身(dao/ansi 89)中使用*oledb,它使用ansi 92接口,因此需要%