`

利用C#实现分布式数据库查询

阅读更多

本文提出了在.Net 环境下使用一种新的开发语言C# 结合 ADO.Net数据访问模型来开发分布式数据库 系统,大大简化了开发过程……

  随着传统的数据库、计算机网络和数字通信技术的飞速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的 关注。但由于其开发较为复杂,在一定程度上制约了它的发展。基于此,本文提出了在.Net环境下使用一种新的开发语言C#结合ADO.Net数据访问模型 来开发分布式数据库系统,大大简化了开发过程。

  1 分布式数据库系统

  就其本质而言,分布式数据库系统的数据在逻辑上是统一的,而在物理上却是分散的。与集中式数据库相比它有如下主要优点:

  · 解决组织机构分散而数据需要相互联系的问题。

  · 均衡负载。负载在各处理机间分担,可避免临界瓶颈。

  · 可靠性高。数据分布在不同场地,且存有多个副本,即使个别场地发生故障,不致引起整个系统的瘫痪。

  · 可扩充性好。当需要增加新的相对自主的组织单位时,可在对当前机构影响最小的情况下进行扩充。

  分布式数据库系统虽然有诸多优点,但它同时也带来了许多新问题。如:数据一致性问题、数据远程传递的实现、通信开销的降低等,这使得分布式数据 库系统的开发变得较为复杂。幸运的是,微软的.Net开发环境为我们提供了C#开发语言和ADO.Net数据访问模型,结合两者来开发分布式数据库系统能 够大大简化开发工作。

  2 远程处理框架和ADO.Net

  开发分布式数据库系统需要解决的两个重要问题是:各场地间的数据通信以及对数据库的操作及管理。使用C#结合ADO.Net能够高效、可靠地解 决这两方面的问题。具体表现为,在C#中通过使用.Net远程处理框架能够方便地解决数据、命令远程传递问题;C#通过ADO.Net对数据库进行操作, 使分布式数据库系统中对数据库的各种操作变得高效、可靠,同时易于解决数据一致性问题。

  2.1 .Net远程处理框架

  实现数据和命令的远程传递有三种方式。第一种是使用报文或消息的方式,把要传送的数据转化为流格式,再通过套接字编程用报文的形式发送到远程主 机。此种方法麻烦,不易实现。第二种是使用Web Service,即各远程主机提供一个数据库查询服务的Web Service。这种方式只能对单个场地进行查询,无法实现多场地的联合查询。第三种是使用.Net远程处理框架(.Net Remoting Framework)技术,它将远程调用的技术细节隐藏起来,服务程序只需通过简单的设置就可以把本地对象变成为远程提供服务的远程对象,客户端可以像访 问本地对象一样透明地访问远程对象,所有的消息、报文等都交给.Net Remoting对象处理,大大简化了开发。远程处理的一般过程如图1所示:

远程处理的一般过程

图1 远程处理过程

  首先,服务器 端创建一个服务器类的实例,远程处理系统创建一个表示该类的代理对象,并向客户端对象返回一个对该代理的引 用。当客户端调用方法时,远程处理基础结构连接检查类型信息,并通过信道将该调用发送到服务器进程。侦听信道获得该请求并将其转发给服务器远程处理系统, 服务器远程处理系统查找(或在必要时创建)并调用被请求的对象。然后,此过程将反向进行,服务器远程处理系统将响应捆绑成消息并由服务器信道发送到客户端 信道。最后,客户端远程处理系统通过代理将调用的结果返回给客户端对象。

  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地址和网络端口号即可方便地获取所发布的远程对象。实现远程对象发布和获取的关键代 码如下:

  远程对象的发布:

 

  //创建一个通道实例,port为指 定的网络端口号
  TcpChannel MyChannel= new TcpChannel (Int32.Parse(port));
   //注册通道
  ChannelServices.RegisterChannel(MyChannel);
  //发布该服务器 端激活对象
   RemotingConfiguration.RegisterWellKnownServiceType( typeof ( DbServer ), "STORE", WellKnownObjectMode.Singleton);

  远程对象的获取:

 

  //根据IP地址和端口号获取相应的 远程对象
  try
   {myDbServer=(DbServer)Activator.GetObject(typeof(DbServer),"tcp://"+ip+":"+p+"/STORE"); }
  //捕捉异常
  catch( NullReferenceException nullExp )
   {MessageBox.Show( "指定的url地址不可到达 " + nullExp.Message );}
   catch( RemotingException remExp )
  {MessageBox.Show( "指定获得的对象定义不 对" + remExp.Message );}

  3.2.2数据库的访问

  通过ADO.Net访问数据库,可以方便地连接数据库,将数据源中的数据导入DataSet对象中,在DataSet对象中可对数据表进行各种 操作,而且DataSet对象本身也可远程传递。这为开发分布式数据库系统带来极大方便。实现数据库访问的关键代码如下所示: 

 

 //建立数据库的连接
   string SqlConn = "Initial Catalog=Store;Data Source=Localhost;Userid=sa;Password=;";
  SqlConnection Conn= new SqlConnection
  (SqlConn);
   Conn.Open();//打开数据库
  //将数据源中的数据导入到数据集对象
  try{
   DataSet ds = new DataSet();
  DataTable dt=new DataTable("Result");
   SqlDataAdapter adapter=new SqlDataAdapter();
   SqlCommand mySqlDataSetCmd =new SqlCommand
   (CmdString,Conn);//CmdString为要执行的命令
   adapter.SelectCommand= mySqlDataSetCmd;
  adapter.Fill(dt);
   ds.Tables.Add(dt); }
  finally
  { Conn.Close();//关闭数据库的连接}

  3.2.3 查询

  分布式数据库系统中的查询一般分为三类:本地查询、远程查询和联合查询。本地查询和集中式数据库的查询没什么区别;对于远程查询,只要获取远程 对象后,调用查询函数,即可方便地实现;最复杂的是联合查询,涉及到多场地之间数据的查询、表的远程创建、传递、连接、合并等技术。下面以实例介绍联合查 询的实现。

  第二连锁店要查询离其较近的第三、第四连锁店中所有北京的供应商所供应的空调 的库存信息以便调货,可通过以下步骤实现。首先,获取总部以及第三、第四连锁店所发布的远程对象。接着,通过 远程对象在总部创建一临时数据表t1,将查询到的所有北京的供应商信息存放在t1表中(各分店只有供应商名,并不知其所在地,只有总部才有供应商的详细信 息),再将t1表保存到第三和第四连锁店。然后让t1表分别与两店的库存表作连接,找出所有北京供应商所供应的空调库存信息(如空调名称、型号、个数、价 格等信息),并将连接结果t2和t3数据表返回到第二连锁店。最后对t2和t3两表进行合并,并使用DataGrid控件显示出来。上述实现中,包含了不 同场地之间数据表的复制、传递、连接等,所用到的一些函数(如:远程创建数据表、表与表间的远程连接、合并等)都放在dll中,可以方便地调用。

  4 结束语

  利用C#的.Net Remoting技术能够方便地解决各场地间数据的通信问题。另外,C#通过ADO.Net访问数据库,使得对数据库的操作及管理变得更加高效、可靠。这 两种技术的使用,有效地解决了开发分布式数据库系统的主要问题,大大减轻了系统开发工作量,并且提高了系统的可靠性和安全性。

分享到:
评论

相关推荐

    C#远程分布式数据库查询系统代码

    摘要:C#源码,数据库应用,分布式数据,数据库查询系统 C#远程分布式数据库查询系统代码,程序分客户端连接和服务端,测试数据是MDB,也就是Access数据库,你可以换为SQL。测试时Windows弹出的警报需要点击允许连接。

    实现分布式数据库查询

    本文介绍了如何在.Net环境下利用C#编程语言和ADO.Net数据访问模型来实现这一功能,从而简化分布式数据库系统的开发。 首先,分布式数据库系统的核心特征在于数据的逻辑统一性和物理分散性,它解决了组织机构分散但...

    远程分布式数据库查询系统的设计研究.pdf

    3. 远程分布式数据库查询系统的实现方式:文中提到了利用.NET框架和***技术实现远程分布式数据库查询系统的方案。.NET框架提供了一套远程处理框架,而***则提供了访问数据库的技术支持。结合这两者,可以构建一个...

    远程分布式数据库查询系统的设计.pdf

    在本文中,作者王永刚、卢晓颖和方云详细介绍了在.Net环境下,利用C#开发语言以及***数据访问模型来构建分布式数据库系统的方法和框架。 分布式数据库系统是一种在物理位置上分布在不同地点的数据库管理系统,这些...

    基于C_和ADO_Net优化分布式数据库查询的实现.pdf

    ### 基于C#和ADO.NET优化分布式数据库查询的实现 #### 分布式数据库简介 分布式数据库系统作为计算机网络技术和数据库技术深度融合的结果,具备独特的数据分布特性。它由位于计算机网络不同节点上的多个逻辑相关的...

    用VC#实现分布式COM+服务之实现数据库分布事务

    总之,通过VC#实现的COM+分布式服务,结合MSDTC的事务管理能力,可以有效地处理复杂的分布式数据库事务。这是一项对于构建高可用、高并发的企业级应用至关重要的技能。通过深入理解和实践,开发者能够构建出更健壮、...

    C#分布式开发源码实例

    在C#中进行分布式开发,我们可以利用.NET框架提供的丰富的类库和工具,如WCF(Windows Communication Foundation)服务、Remoting、ASP.NET Web API等,实现跨进程甚至跨网络的通信。 本源码实例主要针对C#初学者,...

    C#+SQL Sever

    在本章节中,我们将深入探讨如何使用C#结合SQL Server构建一个远程分布式数据库查询系统,该系统不仅能够实现本地和远程数据库的查询与操作,还能支持跨数据库的连接查询。 #### 实例功能展示 在本实例中,我们将...

    C#数据库远程访问

    本项目专注于展示如何利用C#实现分布式数据库访问,为开发者提供了一种跨网络连接和操作数据库的方法。分布式数据库是指由多个物理位置上的数据库组成,通过网络互相连接并协同工作,提供更高效、可扩展的数据存储...

    C#数据库分布式事物使用

    当TransactionScope内的操作涉及到不同的数据库服务器时,.NET会自动提升为分布式事务,并利用分布式事务协调器(Distributed Transaction Coordinator,简称DTC)来保证跨系统的事务一致性。 5. **配置DTC** ...

    C#实现访问Redis数据库

    本文将详细讲解如何使用C#语言来实现对Redis数据库的访问,以便充分利用其高效特性来提升应用性能。 首先,要实现C#访问Redis,我们需要一个客户端库。StackExchange.Redis是.NET开发者广泛使用的官方推荐库,它...

    利用C#远程存取Access数据库

    "利用C#远程存取Access数据库" 一、技术要点 在分布式应用程序中,进程之间的通信是必不可少的。传统上,这需要深入了解通信流两端上进程的对象,以及低级别协议的宿主、应用程序编程接口以及配置工具等。幸好,...

    基于C#的Remoting数据库应用

    本主题聚焦于“基于C#的Remoting数据库应用”,这是一个关于如何使用C#和Remoting技术来实现分布式数据库应用程序的例子。Remoting是.NET框架提供的一种功能,允许对象在不同的应用程序域(AppDomain)之间进行通信...

    C#源码-数据库监听

    本文将深入探讨如何使用C#代码实现对数据库的监听,以及它在实际应用中的作用和重要性。 首先,数据库监听的基本概念是通过程序实时监控数据库中的特定事件,如数据插入、更新或删除等操作。当这些事件发生时,监听...

    基于c# net的分布式图片服务器项目

    在C# .NET MVC框架下,我们可以利用其强大的模型-视图-控制器架构来实现业务逻辑和视图的分离,方便我们专注于图片的处理和存储。分布式图片服务器的实现主要包括以下几个关键步骤: 1. **图片上传**:用户或应用...

    Visual C#数据库项目案例导航

    这份资料详细介绍了如何利用C#进行数据库项目的开发,涵盖了从基础概念到高级应用的各种实例,旨在帮助开发者提升在实际工作中的技能。 在C#编程中,数据库的交互通常涉及到ADO.NET框架,它是.NET Framework的一...

    C#相关的数据库高级教程资源内容

    在事务处理方面,C#提供了TransactionScope类,可以方便地实现分布式事务。这使得跨越多个数据库操作可以作为一个原子单元,确保数据的一致性。同时,我们还会讨论隔离级别,如读未提交(Read Uncommitted)、读已...

Global site tag (gtag.js) - Google Analytics