2009-12-29 123 views
1

我有一個簡單的SQL Server CE數據庫,試圖更新表中的一行。以下命令的工作原理:SQL Server CE Where子問題

UPDATE ConsoleUsage 
SET TotalCircuits = 123 

但上面的命令更新的所有行,所以我想是這樣的:

UPDATE ConsoleUsage 
SET TotalCircuits = 123 
WHERE Index = 912 

的目的是更新表中的一行。但此命令失敗,提供下述神祕的錯誤消息(這裏使用MS建議格式):

錯誤代碼:80040E37
消息:[UPDATE Con​​soleUsage SET TotalCircuits = 123 WHERE指數= 912]
次要ERR。 :0
來源:SQL Server 2005移動版ADO.NET數據提供程序
錯誤。帕。 :UPDATE Con​​soleUsage SET TotalCircuits = 123 WHERE指數= 912

「索引」列的索引的表,我已經檢查了所有的拼寫和我既沒有cmd.CommandType =的CommandType試過這種.TableDirect;和cmd.IndexName =「MainIndex」;

我錯過了什麼?

+0

更新:在WHERE子句中使用不同的字段試過,這個工作。所以我的「索引」列出現錯誤,無論是它的名稱還是類型 - 它都是「主鍵」(但是應該如此?),輸入smallint。 – toml 2009-12-30 14:12:57

+0

將名稱「索引」更改爲其他內容(例如「Id」)並嘗試。它工作嗎? – Sasha 2009-12-30 14:25:24

+0

我添加了一個名爲DateCode的新列,與Index相同的數據但不是主鍵,現在可以工作。因爲所有表(我認爲)都必須有主鍵,所以我會留下索引。不擔心有點浪費空間,這張表沒有多少行。 – toml 2009-12-30 16:17:22

回答

1

我認爲「索引」是一個保留字。嘗試用括號周圍:

UPDATE ConsoleUsage SET TotalCircuits = 123 WHERE [Index] = 912 
+0

試過,結果相同 – toml 2009-12-29 19:33:39

1

不知道表結構(你可以張貼表的創建腳本?)這裏有幾件事我會嘗試:

放在方括號([])圍繞所有列和表名將它們轉義出來,以防萬一 將表的模式名稱放到表dbo中。[ConsoleUsage]而不是[ConsoleUsage] 檢查[Index]是否爲char字段,如果是的話,請使用'912'而不是912'

嘗試轉換語句: UPDATEŤ SET TotalCircuits = 123 FROM DBO [ConsoleUsage] T, WHERE T. [索引] = 912

+0

嘗試了所有這些,結果相同。 – toml 2009-12-30 13:56:44

+0

你可以發佈表格的創建腳本嗎? – Sasha 2009-12-30 14:05:39

+0

不知道在哪裏可以找到「創建腳本」,我在設計器中創建了表格(使用studio '05),並且從dataset.Designer.cs文件中複製了單獨的get/set方法和Add方法工作室從一個.xsd文件,我通過從服務器資源管理器中將表格拖入其中)填充到我的代碼中。 – toml 2009-12-30 14:26:58