0

我正在寻找有关如何在两个数据库之间同步数据的意见和建议。

第一个数据库是 SQL Server 2008 Express,可在断开连接的笔记本电脑(无网络或互联网访问)上运行。第二个数据库(主)是在服务器上运行的 VFP 9.0。

当用户将他们的笔记本电脑连接到网络上时,我希望同步过程能够通过。

除了不同的数据库引擎之外,我还需要考虑以下项目:

  1. 表不必具有相同的结构
  2. 主键不相同(SQL Server 中的 GUID 和 VFP 中的字符字段组合)
  3. 表的同步必须按照一定的顺序进行,以尊重父子关系
  4. 在 SQL Server 端的某些插入中,必须在 VFP 表中生成和同步新的主键
  5. 必须进行大量验证,有时需要用户的一些反馈
  6. 并非所有记录都需要同步
  7. 同步后需要删除 SQL Server 上的一些记录
  8. 需要考虑双方删除的记录
  9. 需要对 VFP 数据库进行最少的修改

我现在可能忘记了其他几点,但我想你明白我面临的挑战。我现在的猜测是我需要构建一个自定义同步模块,但在我继续之前我需要你的输入,以防我忽略了一些选项并获得一些关于如何解决这个问题的提示。

我快速查看了 Microsoft Sync Framework,但由于我的所有限制以及尚未构建 VFP 客户端 (AFAIK) 的事实,我认为它不会有很大帮助。

提前感谢您的反馈。

更新:笔记本电脑应用程序是 C# WinForm 应用程序,使用 SQL Server 2008 Express。

4

2 回答 2

1

情况和要求的复杂性使我相信您需要编写一个 Visual FoxPro 应用程序。Visual FoxPro 轻松连接到 SQL Server 2008 数据。代码的复杂性在于匹配需求并识别需要同步的数据,而不是语法。Visual FoxPro 的优势在于数据操作语言和连接到几乎任何数据源(本机 DBF、ODBC、ADO 和 XML)的能力。

SQL Server 可以通过 VFP 9 OLE DB 驱动程序读取 VFP 9 数据。您可以编写 T-SQL 存储过程来获取 VFP 数据。不确定它如何识别连接到网络的笔记本电脑。

另一种方法是使用 SQL Server XML Diffgrams。无论如何,我都不是这种方法的专家,但这将是您可以研究的东西。

由于我的专长是 Visual FoxPro,我会发现另一种方式更容易,但这只是我。你必须使用你为项目所拥有的资源的技能。

VFP 通过连接(DSN、ConnectionString)和涉及 SQL 直通(SQLConnect()、SQLExec() 和 SQLDisconnect())、CursorAdapters、远程视图或三者组合的任何技术读取和写入 SQL Server 数据。

Visual FoxPro 程序还可以识别 Windows 事件,例如连接到网络。该应用程序可以安装在每台笔记本电脑上并运行以识别 Windows 事件。引发事件后,应用程序可以尝试连接到 SQL Server 数据库(可能正在连接到没有 SQL Server 可用的网络或不同的网络)。

连接后,它会运行逻辑来检查和同步数据库。

听起来您对写入笔记本电脑上的 VFP 9 数据的应用程序没有太多控制权。如果您确实可以控制写入 VFP 9 数据库的应用程序,您可能会考虑将应用程序更改为写入笔记本电脑上的 SQL Server Express 实例,然后您可以使用 SQL Server 复制来管理同步。虽然这不是一项简单的任务,而且 SQL Server 复制虽然在每个版本中都变得更好,但确实会导致 DBA 脱发。这条路线肯定有很多工作要做。

Rick Schummer Visual FoxPro MVP

于 2009-06-07T17:52:58.547 回答
0

我鼓励您再看看 MS 同步框架。我们有一种情况,我们希望偶尔将连接的 C# 客户端应用程序与我们的 Java/Oracle 后端同步。您可以为 C# 客户端使用同步框架提供程序,并为后端实现您自己的 KnowledgeSyncProvider 自定义子类。这将使您走到一半,并向您展示申请其余部分的良好模式。

于 2009-07-17T01:58:24.427 回答