我们构建了一个需要来自另一个数据库的表的本地副本的应用程序。我想编写一个ado.net例程,它将使本地表与主服务器保持同步。使用.net 2.0,C#和ADO.NET 请注意我真的无法控制主表,这是第三方,我不想搞砸的关键任务应用程序。
例如,这是主数据表:
ProjectCodeId Varchar(20) [PK]
ProjectCode Varchar(20)
ProjectDescrip Varchar(50)
OtherUneededField int
OtherUneededField2 int
我们需要保持同步的本地表...
ProjectCodeId Varchar(20) [PK]
ProjectCode Varchar(20)
ProjectDescrip Varchar(50)
或许更好的解决这个问题的方法是你过去对这类问题做了什么?什么最适合你或应该不惜一切代价避免?
我对这个问题的目标是确定一个处理这个问题的好方法。因此,我经常将两个或多个脱节数据源的数据组合在一起。由于这个原因,我没有包含数据库平台,它确实应该没关系。在目前的情况下,两个数据库都是MSSQL,但我更喜欢不使用链接数据库或DTS等的解决方案。
当然,截断本地表并每次从主服务器重新填充它是一个选项,但是有数千行我不认为这是非常有效的。你呢?
答案 0 :(得分:1)
编辑:首先,要认识到您正在做的是手动复制和复制从不简单。 您需要跟踪并应用所有CRUD状态更改。也就是说,ADO.NET可以做到这一点。
要跟踪对源的更改,您可以对源数据库使用“查询通知”。这需要对数据库的特殊权限,因此源数据库的所有者需要采取措施来启用此解决方案。我自己没有使用过这种技术,但这里有一个描述。
请参阅“Query Notifications in SQL Server (ADO.NET)"
引入了查询通知 Microsoft SQL Server 2005和 System.Data.SqlClient命名空间 ADO.NET 2.0。以服务为基础 经纪人基础设施,查询 通知允许应用程序 数据发生变化时通知。 :此 功能特别有用 提供缓存的应用程序 来自数据库的信息,例如 Web应用程序,需要 在源数据通知时通知 改变。强>
要从源db表应用更改,您需要从目标db表中检索数据,将更改应用于目标行并将更改发布回目标db。
要应用更改,您也可以 1)删除并重新插入所有行(简单),或 2)合并逐行更改(硬)。
删除并重新插入是不言自明的,所以我不会详细介绍。
对于逐行更改跟踪,这是一种方法。 (我在这里假设查询通知不会给你逐行更改信息,所以你必须计算它。)
通过循环遍历相应的表DataView并使用其他DataView的Find方法识别第一个表中未显示的行来识别添加和删除的行。根据需要从目标表中插入或删除行。 (Delete方法不会删除该行,但会将其标记为由TableAdapter Update删除。)
祝你好运!+汤姆
答案 1 :(得分:0)
我会推动插入数据的应用程序将插入到一个db / table中然后另一个插入到同一函数中的方向。让应用程序完成工作,数据库将被推送。
答案 2 :(得分:0)
一些问题 - 什么是db平台?你是如何使用数据的?
我假设您只是将这些数据用作查找...并且由于您没有时间戳而且没有能力修改现有表格,我只是定期吹掉本地副本并将其下拉从主表再次。
除非你有大量的数据,否则这个开销应该很小。
如果你需要同步回主表,你需要做一些更奇特的事情。
答案 3 :(得分:0)
您可以使用SQL复制吗?这比编写代码更好吗?