如何找到已读入DataTables的结构相同的两个查询之间的差异?返回更改的值

时间:2018-06-21 14:54:58

标签: c# .net xml datatable compare

我要做的是查询数据库,然后与已保存到XML的同一数据库表中的过去查询进行比较。我以为我可以使用DataTables来做到这一点,但看起来他们将没有此功能。

我试图将XML文件读入数据集,然后使用此方法。

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"preferenceName"];

但这只是返回了所有内容。我正在寻找的是在数据库表中获取从一天到下一天更改的值。

2 个答案:

答案 0 :(得分:0)

get values that were changed

已更改的行的键?每一行的列也不同吗?

您所追求的需要进一步定义。如果将查询结果保存到表中,则也可以不离开数据库而完成此操作。然后,您可以“超快地从june中选择rowkey并在june.whoID = july.whoID上的july中加入june.importantColumn <> july.importantColumn”。

答案 1 :(得分:0)

我通过声明主键解决了我的问题。这允许比较返回已更改的值。我还不得不在比较之前将两个文件都写到XML,因为它会导致类型不匹配错误。

    public DataTable compareConfigs(DataTable today, DataTable yesterday)
    {
        DataTable dtCurrent = today;

        DataTable dtLast = yesterday;
        dtLast.AcceptChanges();

        DataTable dtChanges = null;

        dtLast.Merge(dtCurrent, true);

        dtChanges = dtLast.GetChanges(DataRowState.Unchanged);
        return dtChanges;

    }


static void Main(string[] args)
    {
        // Declaring the DataSets
        DataSet dataSet = new DataSet();
        DataSet dataSet2 = new DataSet();


        // reading in an XML file to DataTable
        dataSet.ReadXml(@"Path to saved XML query");
        DataTable yesterday = dataSet.Tables[0];
        yesterday.PrimaryKey = new DataColumn[] { yesterday.Columns["Key"]};

        // reading in an xml file to datatable
        dataSet2.ReadXml(@"Path to saved XML query");
        DataTable today = dataSet2.Tables[0];
        today1.PrimaryKey = new DataColumn[] { today1.Columns["Key"]};

        ConfigCompare comp = new ConfigCompare();
        DataTable mismatch = comp.compareConfigs(today, yesterday);
    }
}