c# - 有什么有效的解决方案/方法吗?

标签 c# sql-server winforms ado.net

我正在创建一个工具,它以两个数据库作为输入,比较表并显示表之间的“仅数据差异”。

例如,
源数据库-人员、订单(两个表)
目的地数据库-人员、订单(两个表)

现在,我的应用程序将源数据库中的人员与目标数据库中的人员进行比较,并仅显示源人员中而非目标人员中的记录。

这是我的方法-

  1. 将两个数据库加载到两个数据集中(源数据集, 目标数据集)。
  2. 逐行比较两个表。
  3. 如果发现任何更改(例如源 Person 中的行不在目标 Person 中),则将这些行插入到目标 Person 中。

我的问题:有没有更好/有效的方法来实现这一目标?

迭代整个数据库是效率最低的解决方案。

最佳答案

通常最好将工作推送到数据库中。为每对表生成一个 FULL OUTER JOIN 查询以计算服务器上的差异。这将到目前为止比将所有数据传输到客户端要快。

特别是数据表等效率不是很高。

另一种方法是请求对行进行排序并在内存中对两个结果流执行合并连接。您可以在网络上找到有关如何合并两个排序流的示例代码。

关于c# - 有什么有效的解决方案/方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38171172/

相关文章:

c# - 设置 DataGridView 单元格值并添加新行

c# - 用于从 .NET Core 应用程序调用 WCF 服务发送 cookie 的中间件

c# - 加密安全的 XML 比较器

sql - Adventure Work 数据库中复合主键的概念

sql - 如何在 Catalyst 中的 DBIx::Class 上设置 sql 选项

c# - Windows 窗体数据绑定(bind)

c# - 为什么这个经过检查的计算不会抛出 OverflowException?

c# - 如何在 C# 中为已在 WPF 中的 XAML 中声明的矩形着色?

sql-server - 列 ""在 Propel 2 的表 "status"中声明了两次

c# - 调整 DataGridView 宽度以适应列