我正在尝试从数据库中获取一些结果,但查询失败了!
String sqlFindModel = "SELECT * FROM [PRODUCT] WHERE [PN] LIKE ('*" + textBox1.Text + "*')";
当我修剪“WHERE [PN] LIKE ...”部分时,它工作正常。 当我将LIKE替换为'='并查找Exact值时,它可以正常工作。
我很困惑。
PS - 有趣的是,当直接在ACCESS中进行查询时,你必须使用*;但是当使用C#并连接到MS Access时,需要使用%...有趣!
答案 0 :(得分:9)
*
未用于SQL LIKE语句中的通配符 - %
是。
但是,您不应只更改您的代码以使用%
- 您应该修复您的代码,使其 不易受SQL injection attacks攻击相反。您应该使用参数化SQL。有关示例,请参阅OleDbCommand.Parameters
的文档。
答案 1 :(得分:3)
考虑Access'未记录的ALike
比较运算符是否会使这更容易处理。
"SELECT * FROM [PRODUCT] WHERE [PN] ALike '%" + textBox1.Text + "%'"
ALike
信号访问'db引擎以期望ANSI通配符(%和_而不是*和?)。因此,无论您是在Access会话中运行,还是从使用OleDb的Access会话外部运行,您的查询都可以正常运行。
我已经看到ALike
的反对意见,因为它不是标准的SQL。但是,在为其他数据库引擎调整Access查询时,我更倾向于将ALike
更改为Like
,而不是必须更改*和?到%和_。
答案 2 :(得分:2)
尝试用%
替换*字符