【问题标题】:SQLite error near "WITH" [duplicate]“WITH”附近的SQLite错误[重复]
【发布时间】:2014-08-27 11:29:46
【问题描述】:

我尝试使用此代码更新数据

SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;");
public static string filename = CGlobalVar.CurrentMissionFolder + @"\DBase\BMS_Ops";

conn.Open();

SQLiteCommand scom = new SQLiteCommand(conn);
scom.CommandText = "WITH NewNames(SatuanID, ParentAddr, IpSlave, row_Num) AS (select SatuanID, ParentAddr, IpSlave, (SELECT COUNT(*) FROM SatuanKawan AS t2 where ParentAddr = " + satuan.wOpsAddr.ToString() + " and t2.SatuanID <= t1.SatuanID) AS row_Num From SatuanKawan AS t1 where ParentAddr = " + satuan.wOpsAddr.ToString() + " ) update SatuanKawan set IpSlave = '" + udpSlave + "' WHERE SatuanID IN ( SELECT SatuanID FROM NewNames WHERE row_Num = " + j + ")";
scom.ExecuteReader();
conn.Close();

但是执行代码时出错

SQLite error
near "WITH": syntax error

当我尝试在 sqlite 浏览器中执行查询时,它工作正常。

如何解决?

编辑

这是变量后的值öf scom.CommandText

WITH NewNames(SatuanID, ParentAddr, IpSlave, row_Num) AS
  (SELECT SatuanID,
          ParentAddr,
          IpSlave,
     (SELECT COUNT(*)
      FROM SatuanKawan AS t2
      WHERE ParentAddr = 1
        AND t2.SatuanID <= t1.SatuanID) AS row_Num
   FROM SatuanKawan AS t1
   WHERE ParentAddr = 1)
UPDATE SatuanKawan
SET IpSlave = '192.168.1.101'
WHERE SatuanID IN
    (SELECT SatuanID
     FROM NewNames
     WHERE row_Num = 1)

还是我使用了错误的 system.data.sqlite.dll?

我很困惑为什么这个查询在 c# 中出错,但是当我在 sqlite 浏览器中手动运行数据库时在变量之后工作。

已解决

就像 laalto 说的。当尝试在我的应用程序中调试时,此版本返回 3.7.10,当我使用 sql 浏览器调试时不同的是版本值 3.8.4.2,所以我尝试搜索最新版本,我在http://docs.nuget.org/docs/start-here/installing-nuget 中找到它并安装包系统数据 sqlite 版本 3.8 .5 在我的应用程序中,它可以工作。

【问题讨论】:

  • 你使用的是什么版本的 SQLite?
  • SQLite 版本 3,版本 3.8.4.2
  • 。 .您可以编辑问题并打印出CommandText变量替换后吗?
  • 当您以与运行有问题的查询相同的方式运行 SELECT sqlite_version(); 时会返回什么?
  • 读取任何SELECT查询结果的方式相同。

标签: c# sql sqlite


【解决方案1】:

你错过了一些单引号:

WHERE ParentAddr = " + satuan.wOpsAddr.ToString() + "

应该是

WHERE ParentAddr = '" + satuan.wOpsAddr.ToString() + "'

还有一个类似的。

附带说明,出于多种原因,像这样连接您的参数是不好的。它容易出错,可能导致性能下降,甚至导致 SQL 注入漏洞。您应该改为参数化您的查询。

【讨论】:

  • 我改了但还是报错SQLite error near "WITH": syntax error
猜你喜欢
  • 2016-01-14
  • 2018-10-08
  • 2020-01-03
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多