Я пытаюсь скопировать недостающие записи из одной базы данных в другую. Две базы данных - это старые базы данных Access. Я использую 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);
}