【发布时间】: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查询结果的方式相同。