2015-10-14 46 views
0

我建立了一個數據庫(微軟SqlServerCe.4.0)使用Visual Studio和包含兩個字段一個表:數據庫和數據集無法同步關於自動遞增ID

  • ID:整數,主鍵,沒有空,唯一,沒有默認值,標識
  • 標稱,我們並不真正關心這個一個

然後我建立包含此表作爲數據表中的數據集,我有這樣一個DataAdapter:

 marque_adapter = factory.CreateDataAdapter(); 

     command = connection.CreateCommand(); 
     command.CommandText = "SELECT * FROM " + DB_TABLE_MARQUE + ";"; 
     marque_adapter.SelectCommand = command; 

     command = connection.CreateCommand(); 
     command.CommandText = "UPDATE " + DB_TABLE_MARQUE + " SET nom = @nom WHERE id = @id;"; 
     CreateAndAddParameterFromSource(command, "id", "id"); 
     CreateAndAddParameterFromSource(command, "nom", "nom"); 
     marque_adapter.UpdateCommand = command; 

     command = connection.CreateCommand(); 
     command.CommandText = "DELETE " + DB_TABLE_MARQUE + " WHERE id = @id;"; 
     CreateAndAddParameterFromSource(command, "id", "id"); 
     marque_adapter.DeleteCommand = command; 

     command = connection.CreateCommand(); 
     command.CommandText = "INSERT INTO " + DB_TABLE_MARQUE + " (nom) VALUES (@nom);"; 
     CreateAndAddParameterFromSource(command, "nom", "nom"); 
     marque_adapter.InsertCommand = command; 
     //... 
     data = new DataSet(); 
     marque_adapter.Fill(data, DB_TABLE_MARQUE); 

當我嘗試插入新行時出現問題。 我做的:

  • table.NewRow()
  • 設置 「NOM」 字段
  • table.Rows.Add(NEWROW)
  • adapter.Update(DataSet中,表名)

如果我什麼也沒做,以後我會遇到問題,當我嘗試獲取該行的ID時(我想它會將它設置在上述四條指令之間的某處)。 我期待的DataTable照顧生成一個的,但是......

所以,我想remindind DataTable中照顧自動遞增的:

idColumn.Unique = true; 
idColumn.AutoIncrement = true; 

現在,它的工作原理是第一次,但當我第二次運行該程序時,它將再次從一個計數器開始計數,並且我被告知該ID應該是唯一的。如果我刪除了數據庫(由Visual製作的sdf文件的副本),或者如果我使用Visual手動刪除行,它將在第一次運行良好,並且我在之後得到相同的錯誤。

問題的確是當我嘗試保存我的DataSet,特別是當添加新行(選擇,更新,刪除很好)時。

很顯然,當涉及DataTable和數據庫時,我沒有得到如何管理主鍵(單獨的數據表是好的)。 特別要同步兩個...

我錯過了什麼? 我很肯定我誤解了一些東西。

回答

1

MSDN

Bydefault,AcceptChanges被更新後隱式調用,並且該行中的原始值,這可能是通過ADO.NET分配自動增量值,都將丟失。

所以,你需要創建一個策略或者通過ADO或取回從SQL遞增後的ID作爲輸出參數合併自動遞增的值,然後根據這個MSDN Article表示合併的標識列值。

+0

非常感謝你,我不知道! – Utundu