如何比较C#中2个不同MS Access数据库中的2个相似表?

时间:2010-09-08 17:04:03

标签: c# sql ms-access

我被要求创建一个桌面工具,将较旧的访问数据库与较新的“更新”访问数据库进行比较,并创建一个包含所有新记录或更改记录的Excel文件。

我需要比较的数据库表是结构化的 主键|描述。

我创建了一个简单的Windows窗体,允许用户选择旧的和新的数据库,我想出了如何打开数据库并对它们运行SQL查询但是我坚持如何进行比较而不需要制作数千个SQL调用每个DB。

使用SQL服务器和Web服务器我现在可以完成,但是将其创建为桌面应用程序,MS Access让我有点困惑。

4 个答案:

答案 0 :(得分:2)

这在Access中与在SQL Server中完全相同。只需编写一个为您进行比较的查询:

select t1.key, t1.description, t2.description
 from t1
   full outer join t2 on t1.key=t2.key
 where t1.description <> t2.description
    or t1.description is null
    or t2.description is null;

这将生成具有相同键但值不同的所有记录的列表。然后将记录集转储到文件或gridview或其他东西。

您也可以在纯MS Access中为此执行此UI,并完全跳过C#部分。然后它会非常快,MS Access非常适合构建本机UI。

答案 1 :(得分:0)

您是否坚持使用用户的技术选择?如果只有一个较旧的数据库和一个较新的数据库进行比较,则不需要桌面应用程序。如果有多个较旧的和较新的那些,你将需要它。

如果有帮助,您可以将Access dbs导入SQL Server。

还要考虑创建第三个Access数据库,其中包含指向前两个表的链接。然后,您将两个数据集放在一个位置,您可以编写查询来比较它们。

无论是将它们带入内存还是SQL Server,这个想法都是一样的,只是更容易跟踪后端的查询而不是代码中的查询。

答案 2 :(得分:0)

如果您使用的是.Net Framework 3.5或更高版本,一种方法是创建两个列表并将两个数据库中的记录放在这两个列表中进行比较。之后,您可以使用Linq ExceptUnion扩展方法快速找到两组中的差异。有关这些扩展方法,请参阅here

答案 3 :(得分:0)

以下是我最终如何做到这一点。

我以简单的形式收到了用户的新旧数据库文件信息。然后我打开Olddatabase并将每条记录添加到使用Ahmad Mageed's answer代码的Dictionary“dictionaryOld”中。然后我创建了第二个字典“dictionaryNew”来保存新的或更改的记录。我遍历新数据库并将每条记录与dictionaryOld进行比较,添加不存在或已更改的记录。

我确信有更好的方法可以做到这一点,但看起来它适用于我需要的东西,谢谢大家指点我的方向!

现在关闭如何将其写入文件并捕获错误等......

这是代码

    Removed source, new and improved version comming....