2014-08-27 93 views
0

我嘗試使用此代碼的SQLite錯誤附近「WITH」

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的瀏覽器查詢它的工作原理精細。

如何解決這個問題?

編輯

這是變量

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後scom.CommandText價值?

我混淆了爲什麼這個查詢在c#中的錯誤,但工程時,我在sqlite瀏覽器中手動運行數據庫後變量。

解決

像laalto說。當我嘗試在我的應用程序中調試此版本返回3.7.10,不同的時候使用SQL瀏覽器的IM調試是版本值3.8.4.2,所以即時嘗試搜索最新版本,我發現它在http://docs.nuget.org/docs/start-here/installing-nuget和安裝包系統數據sqlite版本3.8.5在我的應用程序,它的作品。

+3

你正在使用什麼版本的SQLite? – 2014-08-27 11:30:50

+0

SQLite版本3,版本3.8.4.2 – Puj 2014-08-27 11:33:25

+0

。 。你可以在*變量替換之後編輯問題並打印出'CommandText' *嗎? – 2014-08-27 11:36:01

回答

1

你錯過了一些單引號:

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

大概應該是

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

而且還有另外一個喜歡它。

一個側面說明,連接這樣的參數是不好的,原因很多。它容易出錯,會導致性能不佳,甚至導致SQL注入漏洞。您應該參數化您的查詢。

+0

我改變它,但仍然錯誤'SQLite錯誤 接近「WITH」:語法錯誤' – Puj 2014-08-27 11:46:33