【问题标题】:Application to compare database schema and data用于比较数据库模式和数据的应用程序
【发布时间】:2019-02-11 12:22:13
【问题描述】:

我正在尝试做一个简单的 Windows 窗体应用程序来比较两个数据库并提交更改或打印更新脚本。为此,我发现 Microsoft.SqlServer.DacFx 可能会有所帮助。但是,安装框架后,DAC.compare 不再可用。正如您在以下链接中看到的那样:missing DAC Compare

有人可以帮忙吗?一些例子将不胜感激。

【问题讨论】:

  • 您是否安装了Nuget package for DacFx?我的猜测是您需要使您的应用程序专门针对 x86 才能使用它。诚然the according info on MSDN 很瘦。
  • 还有其他选择吗? SSDT,我也在考虑这个选项。目标是比较模式、数据(如果需要)、提交有无异常的更改,最后生成一个比较脚本。令人难以置信的是,那里没有很多信息。
  • 如果您想将实体框架包含在您自己的应用程序中,我敢打赌最新的实现将是实体框架。如果您只需要一个工具,SSDT 是您的最佳选择:它允许您创建一个数据库项目,该项目带有比较数据库实例和创建脚本以同步其架构的选项。
  • 我想创建一个应用程序,它可以在其中进行比较和更新,如果您知道任何示例,我将不胜感激。
  • @User10321649 redgate 有一个工具可以做到这一点:red-gate.com/products/sql-development/sql-compare/index 自己构建一个将是一项艰巨的任务,因为有很多不同的变化和场景,我怀疑你会找到一个示例程序学习,因为创建这些工具的人会在付出努力后想要出售它们......要开始使用,您可以看看这个答案:stackoverflow.com/questions/31987701/…

标签: c# sql-server compare schema dac


【解决方案1】:

让包工作后(目标 x86 和 .Net 4.6 或更高版本),比较应该像这样简单:

var source = new SchemaCompareDatabaseEndpoint("YourSourceConnectionStringHere");
var target = new SchemaCompareDatabaseEndpoint("YourTargetConnectionStringHere");
var comparison = new SchemaComparison(source, target);
var result = comparison.Compare();
var differences = result.GenerateScript("YourDatabaseNameHere");
string script = differences.Script;

【讨论】:

  • 谢谢。这只会比较架构。顺便说一句,您是如何从 DB 中提取到 dacpac 的。我能够将 DB 提取到 bacpac 文件、数据 + 模式,但可以找到任何提取 dacpac 的方法。你会比较数据吗?
  • 我的示例仅比较架构,并且只会生成(或运行)应用更改以同步架构的脚本。我找不到任何方法来使用 Microsoft.SqlServer.DacFx 的扩展来比较数据。
  • Visual Studio 2017 在 IDE 中提供了数据比较选项,您知道我们是否可以在 C# 项目中使用它吗?你知道我们可以参考获取该命令的 DLL 吗?提前谢谢你
  • 我手头没有 VS 2017 - 你可以尝试通过 procmon 或类似的东西来追踪使用过的组件。
  • 我无法让它工作.. 我的差异。脚本;调用总是返回 null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多