2011-03-23 106 views
1

我在將一些數據插入到表中時遇到問題。Sql Server CE插入失敗無錯

我用簡單的數據庫做了一個程序。 我使用

  • C#
  • 框架3.5
  • SQL Server移動
  • 該程序運行,GPRS設備上。每天它會收到一個zip文件, 將其解壓並將行插入到 的某些表中。

一些報價

打開連接:

SqlCeConnection conn = new SqlCeConnection("DataSource = " + file); 
conn.Open();     

寫一行:

String sql = "INSERT INTO Mercati(id,descr) VALUES(643,'SHAMPOO')" 
SqlCeCommand execute = conn.CreateCommand(); 
execute.CommandText = sql; 
int result = execute.ExecuteNonQuery(); 
execute.Dispose(); 

數據表是這樣的:

CREATE TABLE Mercati(id int PRIMARY KEY,descr nvarchar(40)); 

這是在try/catch中。每次結果都是1(我切掉了調試代碼)。 我在不同的表格上重複說明不同的數據。

但有時候(有一次4/5傳輸的時間)有一個表的數據沒有插入,結果= 1,沒有例外。

  • 每次我發送我重置 設備和我的程序它重新啓動。
  • 的表被清空每次 (DELETE FROM的Mercati)
  • 的數據是 每個時間相同(這些都是對工作 基地,但他們可以 變化有時是幾個月)

我真的沒有想法。我不明白是什麼問題。或者乾脆如何解決這個問題。 任何解決方案或建議?

非常感謝 丹尼爾

回答

0

我已解決。

INSERTs後我做了一些備份,然後我重置設備。 但我沒有關閉數據庫。

奇怪的是,我做了SeaDrive的建議,插入後表中包含確切的行數。 我做了9 INSERT和我的選擇返回9 Rows.After復位後,我只有1行。

我認爲存在某種緩存,它在執行過程中是透明的,但保持fisical文件不變,除非數據庫關閉。

我希望這將幫助其他貧困developper像我一樣關閉其DB:d

+0

閱讀交易控制。這聽起來像你認爲你的數據庫已配置爲AUTOCOMMIT,但事實並非如此。 – SeaDrive 2011-04-13 18:38:38

2

我能想到的,這將使插入的數據消失的唯一事情是事務控制。你有任何COMMIT/ROLLBACK編程?

有沒有可能將連接字符串更改爲不同的數據庫?

作爲一種調試策略,我的第一種方法是在插入後從表中讀取數據以確保數據在那裏。查看特定的行和總行數。我可能會嘗試在程序的不同位置閱讀它,以查看該行何時消失。

+0

我不使用任何COMMIT/ROLLBACK,或我不知道如果框架使用它。我只使用引用的代碼行。 我想我可以寫和讀,然後重寫......但多少次?我怎麼能確定...... 3次後...數據將被寫入。我會盡力嘗試 – 2011-03-25 07:17:17

+0

它應該每次都工作,沒有失敗。繼續尋找錯誤。 – SeaDrive 2011-03-25 18:23:57