65.9K
CodeProject 正在变化。 阅读更多。
Home

SQLite 比较工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (66投票s)

2011年7月3日

LGPL3

5分钟阅读

viewsIcon

306311

downloadIcon

37698

用于比较两个 SQLite 数据库文件的结构和数据的实用工具。

SQLite Compare Screenshot

引言

SQLite Compare 是一款小巧快速的实用工具,可以比较两个 SQLite 数据库文件的模式和数据差异。

它的诞生源于我找不到一个像样的 SQLite 数据库文件比较工具而产生的沮丧。

起初,我曾尝试将其作为商业产品出售。但过了一段时间,我意识到这并非我所期望的道路,因此我决定将其作为开源项目发布给 SQLite 社区。

我希望它能对您有所帮助。

Using the Code

SQLite Compare 工具由以下 C# 项目组成:

  • SQLiteParser 项目 - 负责解析 SQLite SQL 模式文本并生成整个数据库模式的抽象语法树。如果我们要能够比较两个不同 SQLite 数据库的模式差异,这是必不可少的。
  • DiffControl 项目 - 包含一个 Windows Forms DIFF 控件,我开发它是为了让用户能够查看两个 SQLite 数据库之间 SQL 模式的差异并修改这些模式。它在其他情况下也可能有用,因此值得拥有自己的项目。控件本身由我编写,但 diff 引擎本身是从 CodeProject 的另一个项目中 übernommen 的。
  • FastGrid 项目 - 在开发数据差异视图的过程中,我得出的结论是,标准的 C# 数据网格视图控件无法处理数百万行数据。即使在 VirtualMode 下工作,它也会在内存中存储大量信息,这使得显示大量信息变得不切实际。为此,我开发了一个非常轻量级的控件(WindowsForms),可以足够快地支持这一点。
  • Liron.Windows.Forms 项目 - 包含我开发的**多面板控件**。我为此在 CodeProject 上撰写了另一篇文章(搜索 multi panel)。基本上,它提供了在单个设计时控件中创建多个页面的能力(类似于使用选项卡控件,但没有选项卡...)
  • AutomaticUpdates - 这个项目负责检查网站上是否有新版本的软件,并在必要时下载。它现在已经过时,但快速阅读代码可以揭示我所做的工作,如果您打算在您的应用程序中支持实时更新,它可能会对您有所帮助。
  • UndoRedo - 我编写的一个小型库,用于支持撤销/重做操作。在其他应用程序中也可能很有用。
  • Be.Windows.Forms.HexBox - 我从互联网上下载的一个非常出色的控件,支持十六进制编辑。我用它来编辑 BLOB 字段值。
  • SQLiteTurbo - 主应用程序代码。 所有各种窗体都在这里。
  • 我从开源作者那里下载的杂项库:Garden Point Parser Generator SDK(用于构建 SQLite 解析器代码)、Log4NET(日志记录)、Puzzle Syntax Box(显示更改脚本)

由于我时间不多,而且代码已相当充分地记录,我决定跳过对实用程序内部结构的解释,直接跳到如何使用的说明。

基本上,为了比较两个 SQLite 数据库文件,您需要单击“比较...”按钮。这将打开“比较详细信息”对话框,您可以在其中填写两个 SQLite 数据库文件的路径并选择比较模式。

  • 仅比较模式 - 用于仅比较 SQL 模式差异。这将非常快速地完成,但不会比较任何数据。
  • 比较模式和数据 - 用于比较 SQL 模式差异和所有表数据行。根据数据库的不同,这可能是一个耗时的操作。

比较完成后,该实用程序将显示一个表格,其中包含找到的所有差异,并允许用户深入查看并显示特定差异。

SQLite Comparison Results

当深入到特定的数据库对象时,我们将获得详细的差异。例如:

Table Difference Results

此时,您可以将差异从一个数据库复制到另一个数据库,该实用程序将自动更新相关的数据库模式。

如果您需要比较两个表的**数据行** - 您可以点击“比较数据”按钮,您将看到以下选项卡:

Table Difference Results

此选项卡允许您查看行之间的数据差异,并将差异从一个表复制到另一个表。

关注点

在构建 SQLite 解析器时,Gardens Point Parser Generator 项目证明是一个无价的资源。在我看来,它是 C# 中用于构建解析器和词法分析器的最佳 SDK 之一。

FastGridDiffControl 项目的开发非常有趣。它们证明了在短时间内构建看似复杂的控件并不困难,并且是 Microsoft 和开源社区出色工作的证明。特别是 - Diff 引擎算法是由另一位 CodeProject 成员贡献的。

SQLite 数据库库和 .NET 提供程序是极其通用和健壮的代码。Dr. Richard Hipp(SQLite C 库)和 Robert Simpson(C# SQLite 提供程序)的工作简直太棒了!

重要提示:由于 .NET SQLite 提供程序的工作方式,比较功能对于 GUID 类型列将无法正常工作。请注意,GUID 列实际上存储为 TEXT,因此这样做没有任何好处。

总之,如果您希望比较正常工作,请在 GUID 字段而不是 TEXT 字段中使用 VARCHAR 字段。

历史

  • 2011年7月3日:版本 2.5 - 初始版本(开源)
  • 2011年7月5日:修复了 Setup.nsi 文件,以便在 Release 文件夹中使用正确的文件
  • 2011年7月6日:修复了 64 位系统的问题(更改了构建配置以使用 x86 设置)
© . All rights reserved.