这是处理类型化DataSet的正确方法(为什么TableAdapter不更新数据库)?

时间:2017-09-16 03:09:34

标签: c# database ado.net dataset tableadapter

我需要一些帮助。问题在于:我有两个类型化的数据集:一个与Access DB相关,空表(localDB),另一个与Access数据库DB2相关,表包含1925条记录(localDB2)。我想将数据从DB2表复制到DB空表,但它不起作用。 DB和DB2在运行时复制到Debug文件夹中。以下是代码:

let rows = IndexSet(integersIn: 0..<outlineView.numberOfRows)
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? RowView }

for rowView in rowViews 
    //iterate over rows
}

enter image description here

合并后,localDB中的CompanyAccount表获得1925条记录。在同一个表上调用adapter.Update方法后,变量rec = 0,数据库不会收到任何记录。

enter image description here

有人可以告诉我为什么这不起作用或我做错了什么?非常感谢

1 个答案:

答案 0 :(得分:0)

在CompanyAccount表中查看Rows的RowState属性... RowState应该是&#34;添加&#34;在Merge之后......但AcceptChanges将RowStates重置为&#34; Unchanged&#34;。这就是更新没有做任何事情的原因......如果您没有调用AcceptChanges,则更新应该触发插入语句。

如果您希望localDB.CompanyAccount的所有行都具有RowState ==已添加,您还可以使用Load()函数而不是Merge:

localDB.CompanyAccount.Load(new DataTableReader(localDB2.CompanyAccount), LoadOption.Upsert);