查询不返回任何内容

时间:2012-03-30 16:15:14

标签: c# .net sql ms-access oledbconnection

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

String sqlFindModel = "SELECT * FROM [PRODUCT] WHERE [PN] LIKE ('*" + textBox1.Text + "*')";

当我修剪“WHERE [PN] LIKE ...”部分时,它工作正常。 当我将LIKE替换为'='并查找Exact值时,它可以正常工作。

我很困惑。

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

3 个答案:

答案 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)

尝试用%

替换*字符