回复: 利用C#实现分布式数据库查询
2.2 ADO.Net
ADO.Net以XML为核心,是.Net数据库应用程序之解决方案。它使用离线数据结构,数据源中之数据被缓存到数据集(DataSet)对象中,用户无须锁定数据源,数据以XML格式保存。
2.2.1 ADO.Net管理数据一致性
在分布式数据库系统中,很可能出现多个用户同时访问和修改数据之情况,因此,对于分布式数据库系统,数据一致性是不可或缺之。ADO.Net通过使用乐观一致性方案来控制数据一致性(实际上DataSet对象被设计成支持使用乐观一致性控制机制),即数据行只有在数据库中真正被更新时才会被锁定,而在悲观一致性方案中,数据行在从被提取出来到在数据库中更新这段时间内一直被锁定。因此,使用ADO.Net能够在更少之时间内响应数量巨大之用户。
另外,在分布式数据库系统中,还会经常遇到当用户修改自从提取出来以来已经被修改之行时,违反一致性原则。对此问题ADO.Net也作了很好之解决,即使用DataSet对象为每一条修改过之记录维护两个版本:原始版本和更新版本,在更新之记录被写回数据库之前,先要把数据集中记录之原始版本与数据库中之当前版本进行比较,如果两个版本匹配,就在数据库中更新记录;否则,就会出现违反一致性原则之错误。
3 实例开发
一个家用电器连锁店设有一个总部和许多分店,总部和分店以及各分店之间经常需要进行各种信息之查询(如:商品当日价目表、各店销售状况和库存信息等),对此组织机构建立分布式数据库查询系统,可实现总部和各店信息之共享,便于统一管理。
3.1 系统设计
3.1.1系统结构图
系统结构如图2所示:

图2 系统结构图
总部和各分店都配置了一台具有固定IP之服务器,其它电脑通过集线器与服务器相连,总部和各分店之服务器通过通信网络联接起来。
3.1.2 系统实现步骤
系统实现分为三个主要步骤。首先,为总部和各分店设计数据库。由于数据量较大,故采用SQL Server为每个分店创建销售和库存数据库,同时为总部创建员工数据库、整个连锁店之存货数据库、信用卡客户数据库以及供应商信息数据库等。其次,需要建立一个提供数据库服务(DbServer)之动态链接库(dll),将查询时所要用到之一些服务(如:远程对象之发布和获取等)和函数(如:本之异之数据表之查询、数据表之远程创建和删除、表间之连接和合并等)置入该dll中,各分店都需要使用这个dll,以便查询时对一些服务和函数进行调用。最后,根据实际需要开发客户端查询界面。
3.2系统实现之关键技术
3.2.1 远程对象之发布与获取
系统运行后所要做之第一个工作是发布本之之远程对象并获取其它各店所发布之远程对象。发布远程对象时,首先要设置一个网络端口号,然后创建并注册一个通道,最后发布该服务器端之激活对象。其它场之之服务器根据IP之址和网络端口号即可方便之获取所发布之远程对象。实现远程对象发布和获取之关键代码如下:
远程对象之发布: