我在一個類型化的數據集中有一個多對多的關係表。 爲了方便更新,我在添加新的之前刪除舊的關係(可能與之前一樣)。DataTable:在插入新安全文件之前刪除舊的DataRows?
現在我不知道,如果這種方式是故障保護,或者我應該確保只有刪除被真正刪除(例如使用LINQ)和只添加一個這是真正的新。
在SQL-Server是關係表中定義的唯一約束,這兩個外鍵是一個複合主鍵。
是DataAdapter的更新它的RowState是<>不變預見或沒有數據行的順序? 換句話說:DataAdapter.Update(DataTable)
是否有可能在密鑰已經存在時導致異常?
這是數據模型:
這是部分的代碼(LbSymptomCodes
是一個ASP.Net列表框):
Dim daTrelRmaSymptomCode As New ERPModel.dsRMATableAdapters.trelRMA_SymptomCodeTableAdapter
For Each oldTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow In thisRMA.GettrelRMA_SymptomCodeRows
oldTrelRmaSymptomCodeRow.Delete()
Next
For Each item As ListItem In LbSymptomCodes.Items
If item.Selected Then
Dim newTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow = Services.dsRMA.trelRMA_SymptomCode.NewtrelRMA_SymptomCodeRow
newTrelRmaSymptomCodeRow.fiRMA = Services.IdRma
newTrelRmaSymptomCodeRow.fiSymptomCode = CInt(item.Value)
Services.dsRMA.trelRMA_SymptomCode.AddtrelRMA_SymptomCodeRow(newTrelRmaSymptomCodeRow)
End If
Next
daTrelRmaSymptomCode.Update(Services.dsRMA.trelRMA_SymptomCode)
預先感謝您。
謝謝。但是這會導致三個數據庫調用(和三個事務)而不是一個。當更新在已刪除行和已更改行上的已接受更改的已添加行上失敗時,我無法RejectChanges。 – 2011-04-20 09:21:03
@TimSchmelter:如果發生任何錯誤,您不能在try/catch塊中的單個事務中包裝所有更新以回滾嗎? – codingbadger 2011-04-20 09:45:51
可能但困難,因爲在類型化數據集中,此邏輯封裝在自動生成的TableAdapter中。我必須將這些適配器擴展到與自動生成的文件不同的文件中的部分類中,並公開DataAdapter本身以提供事務。但我很樂意避免這種額外的努力;) – 2011-04-20 11:29:53