2009-02-18 51 views
1

我们构建了一个应用程序,它需要来自另一个数据库的表的本地副本。我想编写一个ado.net例程,它将保持本地表与主服务器同步。使用.net 2.0,C#和ADO.NET。
请注意我真的无法控制第三方主控台,我不想惹恼任务关键型应用程序。从外部数据库表中维护表的本地副本,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

我会推着插入数据的应用程序插入到一个数据库/表中,然后在同一个函数中的另一个插入的方向。让应用程序完成工作,数据库将被推送。

+0

我不认为你明白我的问题/请求。我需要保留位于另一个数据库中的表的本地副本。我的应用必须完成这项工作,我必须创建代码来完成这项工作。感谢您花时间提交。 – Brettski 2009-02-18 05:35:54

0

有些问题 - db平台是什么?你如何使用这些数据?

我打算假设你只是使用这些数据作为查找...并且由于你没有时间戳并且没有能力修改现有表,我只是定期将本地副本删除并将其拉出再次从主表中删除。

除非你掌握了大量数据,否则这个开销应该很小。

如果你需要同步回主表,你需要做一些更奇特的事情。

+0

本地表是SQL,但主机是其他数据源。每次重新装载表格都是一个选项,但有数千行不实用。我会对你更“异国情调”的方式感兴趣。感谢您的答复。 – Brettski 2009-02-18 14:24:29

+0

从你的结构来看,它看起来并不像主人给你提供很多数据来处理,所以同步似乎不是一种选择。在任何情况下,1000行都不会太大。也许你不希望每次使用数据时都这么做,但每隔10分钟左右就会好起来。 – nailitdown 2009-02-19 01:20:25

0

你可以使用SQL复制吗?这比编写代码更好一些吗?

1

编辑:首先,要认识到你所做的是手动复制,而复制从不简单。 您需要跟踪和应用所有CRUD状态更改。也就是说,ADO.NET可以做到这一点。

要跟踪对源的更改,您可以在源数据库中使用查询通知。这需要针对数据库的特殊权限,以便源数据库的所有者需要采取措施来启用此解决方案。我自己并没有使用这种技术,但是这里是对它的描述。

见“Query Notifications in SQL Server (ADO.NET)"

查询通知在 微软SQL Server 2005和 ADO的 System.Data.SqlClient命名空间进行了介绍。NET 2.0。基于服务 代理基础结构,查询 通知允许应用程序在数据更改时通知 。 这 功能对于提供的 信息的高速缓存从数据库 应用程序,如一个 Web应用程序特别有用,并且需要是 当源数据是 改变通知。

申请从您需要检索与目标数据库表中的数据,将更改应用到目标行和发布更改回目标数据库源数据库表的变化。

要应用更改,您可以选择 1)删除并重新插入所有行(简单)或 2)合并逐行更改(硬)。

删除和重新插入是自解释性的,所以我不会详细说明。

对于逐行更改跟踪这里是一种方法。 (我假设这里查询通知不给你行由行变化信息,所以你必须计算。)

  • 您需要确定进行了修改,哪些行,并确定插入和删除的行。为每个表创建一个DataView,以获取可用于按ID查找匹配行的Find方法。
  • 通过使用datetime/timestamp列或通过比较所有字段值来识别修改的行。将修改后的值复制到目标行。
  • 通过循环遍历相应表DataView并使用其他DataView的Find方法来标识没有出现在第一个表中的行,从而识别添加和删除的行。根据需要插入或删除目标表中的行。 (删除方法不会删除该行,而是将其标记为由TableAdapter更新删除。)

    祝您好运!

+汤姆

相关问题