我正在做這個小項目來了解.NET 4.0和SQL Server 2008 R2中的斷開連接模型。如何從類型化數據集中刪除一行並將其保存到數據庫?
我有三個表:
Companies (PK CompanyID)
Addresses (PK AddressID, FK CompanyID)
ContactPersons (PK ContactPersonID, FK CompanyID)
CompanyID是由用戶手動分配。其他ID是自動生成的。公司與ContactPerson有一對多的關係。我已設置任何更改級聯。
我在DataGridView的公司中顯示所有記錄,當單擊一行時,ContactPersons中的相應記錄顯示在第二個DataGridView中。
我已經成功地實現了更新和插入新記錄,但我完全失敗了,試圖刪除行並將更改保存到數據庫。
我是一個打字的數據集。
如果我用這個:
DataRow[] contactPersonRows = m_SoldaCompaniesFileDataSet.ContactPersons.Select("ContactPersonID = "
+ this.m_CurrentContactPerson.ContactPersonID);
m_SoldaCompaniesFileDataSet.ContactPersons.Rows.Remove(contactPersonRows[0]);
的記錄正確顯示在DataGridView但後來不保存在數據庫中。
如果我用這個:
DataRow row = m_SoldaCompaniesFileDataSet.ContactPersons.Rows.Find(this.m_CurrentContactPerson.ContactPersonID);
row.Delete();
的記錄集,但我得到一個exeception:DeletedRowInaccessibleException,當我嘗試刷新DataGridView的。自動生成的dataset.design文件中出現異常彈出窗口。
從昨天開始,我幾乎停留在這一點上。我找不到任何遠程類似於我的問題的地方。我實際上無法理解發生了什麼事。
在Delete()後面使用m_SoldACompaniesFileDataSet.AcceptChanges()。 –
感謝您的回答!根據文檔: Remove()就像調用Delete()然後AcceptChanges(); 我已經嘗試過,並且它不起作用。 我嘗試了各種組合。我在設計器中設置了一個DeleteCommand,如下所示: DELETE FROM ContactPersons WHERE(ContactPersonID = @Original_ContactPersonID) – Zingam
僅刪除從集合中刪除記錄刪除從數據庫中永久刪除數據也在調用AcceptChnages時刪除數據。 –