知识大全 利用C#实现分布式数据库查询

Posted

篇首语:成功由大量的失误铸就。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用C#实现分布式数据库查询相关的知识,希望对你有一定的参考价值。

利用C#实现分布式数据库查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

   分布式数据库系统

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

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

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

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

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

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

   远程处理框架和ADO Net

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

   Net远程处理框架

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

  

  图 远程处理过程

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

   ADO Net

  ADO Net以XML为核心 是 Net数据库应用程序的解决方案 它使用离线数据结构 数据源中的数据被缓存到数据集(DataSet)对象中 用户无须锁定数据源 数据以XML格式保存

   ADO Net管理数据一致性

  在分布式数据库系统中 很可能出现多个用户同时访问和修改数据的情况 因此 对于分布式数据库系统 数据一致性是不可或缺的 ADO Net通过使用乐观一致性方案来控制数据一致性(实际上DataSet对象被设计成支持使用乐观一致性控制机制) 即数据行只有在数据库中真正被更新时才会被锁定 而在悲观一致性方案中 数据行在从被提取出来到在数据库中更新这段时间内一直被锁定 因此 使用ADO Net能够在更少的时间内响应数量巨大的用户

  另外 在分布式数据库系统中 还会经常遇到当用户修改自从提取出来以来已经被修改的行时 违反一致性原则 对此问题ADO Net也作了很好地解决 即使用DataSet对象为每一条修改过的记录维护两个版本 原始版本和更新版本 在更新的记录被写回数据库之前 先要把数据集中记录的原始版本与数据库中的当前版本进行比较 如果两个版本匹配 就在数据库中更新记录 否则 就会出现违反一致性原则的错误

   实例开发

  一个家用电器连锁店设有一个总部和许多分店 总部和分店以及各分店之间经常需要进行各种信息的查询(如 商品当日价目表 各店销售状况和库存信息等) 对此组织机构建立分布式数据库查询系统 可实现总部和各店信息的共享 便于统一管理

   系统设计

   系统结构图

  系统结构如图 所示

  图 系统结构图

  总部和各分店都配置了一台具有固定IP的服务器 其它电脑通过集线器与服务器相连 总部和各分店的服务器通过通信网络联接起来

   系统实现步骤

  系统实现分为三个主要步骤 首先 为总部和各分店设计数据库 由于数据量较大 故采用SQL Server为每个分店创建销售和库存数据库 同时为总部创建员工数据库 整个连锁店的存货数据库 信用卡客户数据库以及供应商信息数据库等 其次 需要建立一个提供数据库服务(DbServer)的动态链接库(dll) 将查询时所要用到的一些服务(如 远程对象的发布和获取等)和函数(如 本地异地数据表的查询 数据表的远程创建和删除 表间的连接和合并等)置入该dll中 各分店都需要使用这个dll 以便查询时对一些服务和函数进行调用 最后 根据实际需要开发客户端查询界面

   系统实现的关键技术

   远程对象的发布与获取

  系统运行后所要做的第一个工作是发布本地的远程对象并获取其它各店所发布的远程对象 发布远程对象时 首先要设置一个网络端口号 然后创建并注册一个通道 最后发布该服务器端的激活对象 其它场地的服务器根据IP地址和网络端口号即可方便地获取所发布的远程对象 实现远程对象发布和获取的关键代码如下

  远程对象的发布

  //创建一个通道实例 port为指定的网络端口号TcpChannel MyChannel= new TcpChannel (Int Parse(port));//注册通道ChannelServices RegisterChannel(MyChannel);//发布该服务器端激活对象RemotingConfiguration RegisterWellKnownServiceType( typeof ( DbServer ) STORE WellKnownObjectMode Singleton);远程对象的获取 //根据IP地址和端口号获取相应的远程对象trymyDbServer=(DbServer)Activator GetObject(typeof(DbServer) tcp:// +ip+ : +p+ /STORE ); //捕捉异常 catch( NullReferenceException nullExp )MessageBox Show( 指定的url地址不可到达 + nullExp Message );catch( RemotingException remExp )MessageBox Show( 指定获得的对象定义不对 + remExp Message );

   数据库的访问

  通过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();//关闭数据库的连接 

   查询

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

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

   结束语

cha138/Article/program/ASP/201311/21698

相关参考

知识大全 .NET Remoting 实现分布式数据库查询

.NETRemoting实现分布式数据库查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开始

知识大全 利用POWERBUILDER开发数据库的WEB查询

利用POWERBUILDER开发数据库的WEB查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 查询参数提高SQL语句的利用率

查询参数提高SQL语句的利用率  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  有时候数据库管理员

知识大全 高级扫描提高数据库查询性能

  一高级扫描使用举例  通常情况下在数据查询的时候数据库会利用索引或者通过全表扫描来查找数据但是如果需要的数据在数据库中存储不连续或者需要查找的记录比较多时此时索引的效果就会大打折扣在这种情况下数据

知识大全 Java数据库编程中查询结果的输出

Java数据库编程中查询结果的输出  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用Java开

知识大全 ASP.NET(c#)实现中英文域名查询

ASP.NET(c#)实现中英文域名查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  

知识大全 c#对PL/SQL查询结果列复制的结果生成指定格式

c#对PL/SQL查询结果列复制的结果生成指定格式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

分布式数据库系统有哪些主要特性?

  分布式数据库系统有以下主要特性  (1)数据独立性;  (2)自治性与共享性;  (3)冗余数据的全局控制;  (4)并行性、一致性和可恢复性;  (5)查询优化特性。

分布式数据库系统有哪些主要特性?

  分布式数据库系统有以下主要特性  (1)数据独立性;  (2)自治性与共享性;  (3)冗余数据的全局控制;  (4)并行性、一致性和可恢复性;  (5)查询优化特性。

知识大全 C#如何连接MySql数据库

C#如何连接MySql数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近两天在解决C#连