我有与db连接的数据集。数据集和TableAdapterManager由VS根据连接自动创建。
我可以像this.tableAdapterManager.UpdateAll(testcheckerDataSet);
那样做
它工作正常。
接下来我(使用3d party数据库编辑器)将.db文件复制到“blank_testing.db”(第2个db),然后从中删除所有数据。所以它只是没有数据的方案。
现在我(在代码中)使用来自“testchecker.db”(第一个数据库)的数据填充数据集,使用元素更改数据,并希望将数据保存到第二个数据库,然后保存到第一个数据库。我试着让它为每个适配器查找connectionString。
string originalPath = tableAdapterManager.Connection.ConnectionString;
string ns = tableAdapterManager.Connection.ConnectionString.Replace("testchecker.db", "blank_testing.db");
tableAdapterManager.Connection.ConnectionString = ns;
group_testingTableAdapter.Connection.ConnectionString = ns;
groupsTableAdapter.Connection.ConnectionString = ns;
testingTableAdapter.Connection.ConnectionString = ns;
this.tableAdapterManager.UpdateAll((testcheckerDataSet) testcheckerDataSet.Copy() ); // here error
tableAdapterManager.Connection.ConnectionString = originalPath;
group_testingTableAdapter.Connection.ConnectionString = originalPath;
groupsTableAdapter.Connection.ConnectionString = originalPath;
testingTableAdapter.Connection.ConnectionString = originalPath;
this.tableAdapterManager.UpdateAll( testcheckerDataSet );
但是我得到错误“并发冲突,updatecommand从1影响0”。我认为这是因为第二个数据库根本没有数据。
那么有人可以告诉我如何将当前数据集保存到另一个db文件然后再保存到第一个(原始)db?
感谢。
答案 0 :(得分:2)
问题在于,当您调用UpdateAll
方法时,它会尝试从数据库中查找以前的记录并进行更新。但在第二个数据库中没有记录。您可以尝试迭代DataTable
中的所有DataRows并使用DataRow.SetAdded()
方法更改行的DataRowState
,然后它会将记录视为新添加的。
还有一件事:
SetAdded
只能在DataRow
为RowState
的{{1}}个实例上调用。您可以在Unchanged
上致电AcceptChanges
。然后,每个DataSet
的{{1}}属性也会发生变化;添加和修改的行变为未更改,删除的行将被删除。现在您可以致电RowState
。