使用tableadapter复制行不会提交对磁盘的更改

问题描述 投票:1回答:1

我正在尝试将丢失的记录从一个数据库复制到另一个数据库。这两个数据库是旧的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);

        }
c# database ms-access tableadapter strongly-typed-dataset
1个回答
0
投票

这条线我在我的在线评论中遇到:

// Do NOT call AcceptChanges here as this would clear property RowState.

因此,请尝试评论此行:

// dstTable.AcceptChanges();
dstTableAdapter.Update(dstTable);
© www.soinside.com 2019 - 2024. All rights reserved.