2009-09-08 81 views
2

我用你的標準智能控件做了一個ListBox,並將它連接到數據庫。它得到在那裏通過查詢生成器,我已經預先生成,數據,所以當我這樣做:TableAdapter.update方法,它去了哪裏?

this.calibrate_swipesTableAdapter.Fill(this.xperdex_crandallDataSet.calibrate_swipes); 

我與我的數據列表框。

然後,當我將數據添加到它的一大塊,通過該:

toadd["card_number"] = card_number; 
this.xperdex_crandallDataSet.Tables["calibrate_swipes"].Rows.Add(toadd); 

它也適用。它效果很好。現在,當我結束時,我失去了所有的信息。更新我的適配器和AcceptChanges,對吧?

沒那麼快。當我致電

this.calibrate_swipesTableAdapter.Update(this.xperdex_crandallDataSet.calibrate_swipes); 

我得到「不包含'更新'的定義」。

什麼給?我沒有看到任何理由爲什麼與填充相同的東西,不會有更新方法。

回答

6

你可能想看看TableAdapter Overview其中規定:

如果在主查詢,將InsertCommand,更新命令足夠的信息和DeleteCommand命令默認創建生成的TableAdapter時。 如果TableAdapter的主查詢不止一個表SELECT語句,則設計者可能無法生成InsertCommand,UpdateCommand和DeleteCommand。如果未生成這些命令,則在執行TableAdapter.Update方法時可能會收到錯誤消息。

你有兩個選擇:

  • 更改您的主查詢
  • 更改更新命令。

要更改UpdateCommand,請查找爲TableAdapter生成的類的名稱是什麼。該代碼看起來應該像下面這樣:


SqlCommand yourUpdateCommand = new SqlCommand("UPDATE...", connection); 
this.calibrate_swipesTableAdapter.Adapter.UpdateCommand = yourUpdateCommand; 

UPDATE:

正如評論者說,也有可能不被生成的命令的其他條件。 查看評論。

+1

+1如果由於關鍵問題(沒有密鑰,非唯一密鑰...)而導致表不可更新,也會發生這種情況( – 2009-09-08 23:15:15

+0

)如果您沒有主密鑰,設計人員將不會生成更新,刪除併爲適配器插入方法。 – Tarik 2009-09-08 23:41:31

+0

謝謝你們。我更新了答案。 – 2009-09-09 00:40:03