0

我有与数据库连接的数据集。Dataset 和 TableAdapterManager 是 VS 基于连接自动创建的。

我可以做this.tableAdapterManager.UpdateAll(testcheckerDataSet); 它工作正常。

接下来我(使用 3d 方数据库编辑器)将 .db 文件复制到“blank_testing.db”(第二个数据库),然后从中删除所有数据。所以它只是没有数据的方案。

现在我(在代码中)用来自“testchecker.db”(1st db)的数据填充数据集,使用 from 元素更改数据并希望将数据保存到 2nd db,然后保存到 1st db。我尝试为每个适配器设置连接字符串。

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 );

但我收到错误“并发冲突,更新命令从 1 影响 0”。我认为这是因为 2nd db 根本没有数据。

那么有人可以告诉我如何将当前数据集保存到另一个数据库文件,然后再保存到第一个(原始)数据库?

谢谢。

4

1 回答 1

2

这里的问题是,当您调用UpdateAll方法时,它会尝试从数据库中查找先前的记录并进行更新。但是在第二个数据库中没有记录。您可以尝试的是遍历您中的所有 DataRowsDataTable并使用该DataRow.SetAdded()方法更改行的DataRowState,然后它将记录视为新添加的。

还有一件事:
SetAdded只能在 is 的实例DataRow上调用。你可以在. 然后每个属性也发生变化;添加和修改的行变为未更改,删除的行被删除。现在您可以调用.RowStateUnchangedAcceptChangesDataSetRowStateDataRowDataRow.SetAdded()

于 2012-05-12T09:48:20.000 回答