C# 将客户端数据库与中心数据库同步

C# 将客户端数据库与中心数据库同步,c#,.net,database,sql-server-2005,synchronization,C#,.net,Database,Sql Server 2005,Synchronization,我需要更新现有数据或将新数据从客户机数据库(比如说DB1)插入中央数据库(比如DB2),这两个数据库都持有相同的模式,并且都驻留在同一台机器上。更新不是双向的。我只希望更改从客户机(DB1)反映到服务器(DB2) 客户机数据库(DB1)只不过是备份数据库(由mdf和ldf文件组成的完整数据库备份),它连接到中央数据库(DB2)所在的同一服务器。一旦备份数据库(DB1)连接到服务器,我就不会对其进行任何更改。备份数据库(DB1)已经有修改过的数据,我想将其更新到中央数据库(DB2)。那么如何使用C

我需要更新现有数据或将新数据从客户机数据库(比如说DB1)插入中央数据库(比如DB2),这两个数据库都持有相同的模式,并且都驻留在同一台机器上。更新不是双向的。我只希望更改从客户机(DB1)反映到服务器(DB2)

客户机数据库(DB1)只不过是备份数据库(由mdf和ldf文件组成的完整数据库备份),它连接到中央数据库(DB2)所在的同一服务器。一旦备份数据库(DB1)连接到服务器,我就不会对其进行任何更改。备份数据库(DB1)已经有修改过的数据,我想将其更新到中央数据库(DB2)。那么如何使用C#.NET编程呢?你能给出一些示例代码吗

我已尝试使用推送订阅进行事务性复制,但未发送快照。问题是,我希望在第一次启动时将修改后的数据从DB1更新到中央数据库DB2,但事务复制不允许我这样做。它不会发送DB1中已经存在的任何修改数据。因此,当您尝试在不使用快照的情况下发送数据时,DB1中的初始数据不会受到影响。备份数据库(DB1)在复制之前已经有修改过的数据。设置复制后,我不会向备份数据库(DB1)中插入任何新的或修改的数据,因此如何解决这个问题

感谢和问候,
Pavan

要实现这一点,您有以下选项:

1.)使用SQL Server事务复制。将DB1作为发布者,DB2作为订阅者,并选择基于拉或推的订阅。DB1中的所有更改都将简单地反映到central。如果我们在Central中对同一元组进行了任何更改,它们将被DB1更改覆盖

优点:易于实施和可靠 缺点:很少定制

2.)使用Microsoft Sync Framework SQLDataBaseProvider。 优点:非常灵活 缺点:我听说过它的坏处,但从未尝试过

3.)自定义实现:这有点困难,因为需要跟踪DB1上的更改。一个选项可以是读取事务日志(事务复制在内部执行),另一个选项是使用触发器并构建更改知识。然后,您需要编写一个库或例程,它将让您更改知识,然后将其应用于中心

编辑: 对于以编程方式备份和还原数据库:


Microsoft Sync framework是最好的解决方案,特别是如果您使用的是express Edition(在这种情况下,复制将无法工作)

如果在SQLServer2008中与SQLServer更改跟踪一起使用,那么同步框架是非常直接的。您还可以定义同步模式(双向、仅上载、仅下载),还可以定义发生冲突时发生的情况(例如违反约束等)


是的,以谷歌为例,在这个主题上有几个直接的演练,包括对等同步(可能是您需要的)和客户机-服务器同步(客户机应该是sql server compact edition)。

您可能还想探索sql server的功能。它是一种复制类型,旨在允许卫星数据库自动将其结果发布回中央存储库

对不起,我问错了。客户机数据库(DB1)只不过是备份数据库(由mdf和ldf文件组成的完整数据库备份),它连接到中央数据库(DB2)所在的同一服务器。一旦备份数据库(DB1)连接到服务器,我就不会对其进行任何更改。备份数据库(DB1)已经有修改过的数据,我想将其更新到中央数据库(DB2)。那么我如何使用C#.NET编程呢?我真的需要一些帮助。如果可能的话,你能给我一些示例代码吗。谢谢并问候帕凡索里,其实我问错了。我已经为Nithin Medha的回复再次描述了我的情景。你能帮我找到解决办法吗。感谢您的回复。我忘了提到我正在使用SQL Server 2005 standard Edition进行评论:“特别是如果您使用的是express Edition(在这种情况下,复制将无法工作)。”您可以使用RMO(复制管理对象)以编程方式在Express Edition中进行同步。Nithin Midha您能为我编辑的问题提供解决方案吗。我把问题改了,因为我忘了提几件事。你能找到一个解决方案并给我一些c#中的示例代码吗?这个场景有点不同,因为我想更新从备份数据库(DB1)到中心数据库(DB2)的更改。实际上,备份数据库(DB1)是客户机数据库的副本,它被带到中心服务器并连接到中心数据库所在的同一台机器上。所以,一旦我将备份数据库(DB1)连接到服务器,我就不会修改它。嗨,帕万,你能重新格式化你的帖子吗?它的每一行似乎都有空格,这使得它被格式化为源代码。