参数化查询不起作用,没有错误

时间:2014-02-20 23:23:58

标签: c# sqlite

为什么以下查询不会返回任何结果?它没有错误。

SQLiteCommand sqliteCommand = new SQLiteCommand("SELECT * FROM " + table + " WHERE @COL LIKE @searchKey", DataBaseConnnection);
sqliteCommand.Parameters.Add("@searchKey", DbType.String).Value = SearchKeyWord;
sqliteCommand.Parameters.Add("@COL", DbType.String).Value = COLString;

1 个答案:

答案 0 :(得分:1)

如果您尝试将列名称作为参数传递,则无法执行此操作。该查询将@COL参数的 literal 值与@searchKey模式进行比较。这是完全合法的语法,但不适用于你想要的生活。

我怀疑你想要的是:

SQLiteCommand sqliteCommand = new SQLiteCommand("SELECT * FROM " + table 
                                              + " WHERE " + COLString 
                                              + " LIKE @searchKey", DataBaseConnnection);
sqliteCommand.Parameters.Add("@searchKey", DbType.String).Value = SearchKeyWord;

但是,如果您对可以传入的字符串进行COMPLETE控制,那么您应该只执行此操作 - 否则您将对SQL注入攻击持开放态度。