我正在尝试将丢失的记录从一个数据库复制到另一个数据库。这两个数据库是旧的Access mdbs。我正在使用C#,数据集,表适配器等。目标表对象以正确的行数结束,但不更新基础数据库。我错过了什么?我是做正确的事还是做得更好,更简单。有问题的表没有索引,因此我通过构建目标表中应该是关键字段的Hashset来检测记录是否存在。
代码如下。使用VS 2019中的向导创建数据源等。
我已经浏览了网页,但发现了很多关于如何复制数据表对象的例子,而不是将更改提交给底层数据库。
namespace ImportTstatDB
{
class Program
{
static void Main(string[] args)
{
var srcDataSet = new _TSTAT_SPECDataSetSrc();
var dstDataSet = new _TSTAT_SPECDataSetDst();
ImportMissingSpecificationMain(srcDataSet, dstDataSet);
//ImportMissingResultSets(srcDataSet, dstDataSet);
dstDataSet.AcceptChanges();
srcDataSet.RejectChanges();
}
private static void ImportMissingSpecificationMain(_TSTAT_SPECDataSetSrc srcDataSet, _TSTAT_SPECDataSetDst dstDataSet)
{
var srcTableAdapter = new _TSTAT_SPECDataSetSrcTableAdapters.SpecificationMainTableAdapter();
srcTableAdapter.Fill(srcDataSet.SpecificationMain);
var srcTable = srcTableAdapter.GetData();
var dstTableAdapter = new _TSTAT_SPECDataSetDstTableAdapters.SpecificationMainTableAdapter();
dstTableAdapter.Fill(dstDataSet.SpecificationMain);
var dstTable = dstTableAdapter.GetData();
var transformerIDs = new HashSet<string>();
foreach (var dstRow in dstTable)
{
var transformerID = dstRow.TransformerID;
transformerIDs.Add(transformerID);
}
foreach (var srcRow in srcTable)
{
var transformerID = srcRow.TransformerID;
if (!transformerIDs.Contains(transformerID))
{
// Doesn't exist so copy
srcRow.SetAdded();
dstTable.ImportRow(srcRow);
}
}
dstTable.AcceptChanges();
dstTableAdapter.Update(dstTable);
}
这条线我在我的在线评论中遇到:
// Do NOT call AcceptChanges here as this would clear property RowState.
因此,请尝试评论此行:
// dstTable.AcceptChanges();
dstTableAdapter.Update(dstTable);