gpt4 book ai didi

c# - 数据表 : is deleting old DataRows before inserting new safe?

转载 作者:行者123 更新时间:2023-11-30 17:18:29 25 4
gpt4 key购买 nike

我在类型化数据集中有一个多对多关系表。为了方便更新,我在添加新关系之前删除了旧关系(可能与以前相同)。

现在我想知道这种方式是否是故障安全的,或者我是否应该确保只删除真正删除的(例如使用 LINQ)并且只添加真正新的那个。

在SQL-Server中是为关系表定义的唯一约束,两个外键是一个复合主键。

DataAdapter 更新 DataRows 的顺序是 RowState <> Unchanged 是否可预测?换句话说:当 key 已经存在时,DataAdapter.Update(DataTable) 是否有可能导致异常?

这是数据模型:

Datamodel

这是部分代码(LbSymptomCodes 是一个 ASP.Net ListBox):

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)

提前谢谢你。

最佳答案

我认为 ADO.NET 中的 DataAdapter 足够聪明,可以按正确的顺序执行删除/插入操作。

但是,如果您真的想确保更新以正确的顺序完成,您应该通过使用 Select 方法手动完成,以返回每个特定行状态的数据行数组。然后,您可以对数据行数组调用 Update 方法

DataTable tbl = ds.Tables["YourTable"];

// Process any Deleted rows first
adapter.Update(tbl.Select(null, null, DataViewRowState.Deleted));

// Process any Updated/Modified rows
adapter.Update(tbl.Select(null, null, DataViewRowState.ModifiedCurrent));

// Process the Inserts last
adapter.Update(tbl.Select(null, null, DataViewRowState.Added));

关于c# - 数据表 : is deleting old DataRows before inserting new safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com