【问题标题】:SQLite Error: near "s": syntax errorSQLite 错误:“s”附近:语法错误
【发布时间】:2013-06-24 16:10:04
【问题描述】:

我总是得到这个错误

“s”附近:语法错误

我的实现:

litecon.ConnectionString = "Data Source=" + AppAddress + "\\database\\mynew22.db;Version=3;UTF16Encoding=True";

从这个方法收到错误 -> liteda.Fill(dt);

        if (lang == "FaToMe")
            liteda.SelectCommand = new SQLiteCommand("select * from mey where trans like '%" + str + "%'", litecon);
        else
            liteda.SelectCommand = new SQLiteCommand("select * from mey where pe like '%" + str + "%'", litecon);

        DataTable dt = new DataTable();
        liteda.Fill(dt); //liteda is SQLiteDataAdapter

这个选择命令没有区别...

"select * from mey where pe like '%" + str + "%'"

"select eng "

总是在“s”附近说:语法错误

但如果使用“xselect * from mey”,在“x”附近说:语法错误

我正在使用这个库 http://adodotnetsqlite.sourceforge.net/

【问题讨论】:

  • 您要求进行注入攻击...
  • 桌子长什么样子?
  • @PinnyM no - str 是我的值/变量想要在我的数据库中找到它,它可以具有任何值,例如 'iran'、'usa'、....
  • 您是否尝试过用分号 (;) 结束查询?
  • 好吧,您遇到了这样一个问题,即像这样处理命令而不是使用正确的参数化查询。以自己的方式进行操作,您会遇到不太“正确”的 SQL 语句,因为您没有平衡逗号或引号。使用参数化查询将让库为您完成工作并代表您处理它。获取它生成的 SQL 命令的副本(打印输出)。手动在您的数据库上运行它 - 您会得到什么?

标签: c# sqlite


【解决方案1】:

str 的值包含撇号时,此查询将不起作用,因为字符串将过早终止:

select * from mey where trans like '%King Solomon's Mines%'

必须使用参数:

cmd = new SQLiteCommand("select * from mey where trans like @pattern", litecon);
cmd.Parameters.AddWithValue("@pattern", "%" + str + "%");

【讨论】:

  • 不起作用 - 我尝试使用此命令,“select * from mey where trans like '%tr%'” - 但收到(靠近“s”:语法错误)
  • 所以是select 失败了;你可能有一些控制字符。
【解决方案2】:

问题通常与撇号有关。您可以使用它们,但必须像另一个答案中提到的那样加倍,

select * from mey where trans like '%King Solomon's Mines%' 应该改为 select * from mey where trans like '%King Solomon''s Mines%'.

一个快速的解决方案是"select * from mey where trans like "+"'%King Solomon's Mines%'".Replace("'","''")

无论如何这都会成功。

【讨论】:

    【解决方案3】:

    问题解决了!

    使用了这些库,问题就解决了…… http://www.devart.com/dotconnect/sqlite/download.html

    谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2016-01-14
      • 2013-08-12
      • 2016-03-12
      • 2020-05-02
      相关资源
      最近更新 更多