c#
  • .net
  • sql
  • ms-access
  • oledbconnection
  • 2012-03-30 144 views 3 likes 
    3

    我想从数据库中获取一些结果,但查询失败!查询不返回任何内容

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

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

    我很困惑。

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

    +4

    试过'%'而不是'*'? – 2012-03-30 16:17:22

    +2

    1)使用参数 2)%是LIKE运算符,而不是* – Quintium 2012-03-30 16:18:13

    +1

    确保清理输入或恶意用户最终可能会通过sql注入攻击删除表或执行各种迂回代码。 – Maciej 2012-03-30 16:20:19

    回答

    9

    *不适用于通配符SQL LIKE语句 - %是。

    但是,你不应该只是改变你的代码,使用% - 你应该修改你的代码,以便它容易SQL injection attacks,来代替。您应该使用参数化的SQL。举例来说,请参阅OleDbCommand.Parameters的文档。

    2

    尝试用%

    3

    替换*字符考虑访问无证ALike比较操作是否会使这更容易对付。

    "SELECT * FROM [PRODUCT] WHERE [PN] ALike '%" + textBox1.Text + "%'" 
    

    ALike信号接入数据库引擎的期望ANSI通配符(%和_而不是*和?)。因此,无论您是从Access会话中运行它,还是从使用OleDb的Access会话之外运行它,您的查询都可以保持一致。

    我见过对ALike的反对,因为它不是标准的SQL。但是,当为其他数据库引擎调整Access查询时,我更愿意将ALike更改为Like,而不是必须更改*和?到%和_。

    相关问题