Web服务数据库访问中间件的实现

上传人:ji****72 文档编号:39529646 上传时间:2018-05-16 格式:DOC 页数:7 大小:52KB
返回 下载 相关 举报
Web服务数据库访问中间件的实现_第1页
第1页 / 共7页
Web服务数据库访问中间件的实现_第2页
第2页 / 共7页
Web服务数据库访问中间件的实现_第3页
第3页 / 共7页
Web服务数据库访问中间件的实现_第4页
第4页 / 共7页
Web服务数据库访问中间件的实现_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《Web服务数据库访问中间件的实现》由会员分享,可在线阅读,更多相关《Web服务数据库访问中间件的实现(7页珍藏版)》请在金锄头文库上搜索。

1、WebWeb 服务数据库访问中间件的实现服务数据库访问中间件的实现日期:2006-05-23来源: 作者:字体:大 中 小 王卫民 郭鸣 贺冬春井冈山学院 计算机系摘要摘要:本文分析现有的数据库访问中间件的现状,指出其中存在的问题,得出应用新技术的必要性。开发了一个基于 Web 服务技术的数据库访问中间件 WSDBM,并以一个应用实例验证了该中间件的有效性。关键词关键词:Web 服务;数据库访问中间件;.Net1 引言引言随着 Intranet/Internet 网络的迅猛发展,面向网络的分布式数据库成为支持 Internet 服务的关键,传统的数据库访问技术已渐渐不能满足分布式应用集成的需要

2、【1】。利用新技术,研究和开发新的数据库访问中间件成为数据库研究领域的主要方向之一。Web 服务是一种崭新的分布式计算模型,基于一系列开放的技术标准,其松散耦合、语言中立、平台无关性、开放性使得它将成为下一代电子商务的架构,成为下一代的 WWW【2】。Microsoft.Net 提供了基于“.Net 框架”的综合开发平台,它提供了涉及客户端、服务器和服务的单独、统一的编程模型。“.Net 框架”和 Visual Studio.Net 一起,给我们提供了一个完整的应用程序开发平台。 本文主要的工作就是在 Visual Studio.Net 平台上,利用 Web 服务将现有的数据库访问方式的封装成

3、中间件,使得封装后的中间件可以满足分布式应用的需要。2 Web 服务中间件接口的定义服务中间件接口的定义现有通用的数据库访问方式,它的主要操作有:设置数据库连接,打开和关闭数据库, 执行查询和执行其他的 Sql 语句,实现事务管理和缓冲池管理。比较先进的数据库访问方式还支持实时数据库连接。因此,为了实现对传统数据库访问方式的封装,我们首先要定义一个 Web 服务,这个 Web 服务至少应该拥有以上所列的 Web 方法(属性为 WebMethod的 public 函数成员)。这些方法就组成了这个 Web 服务的接口。.Net 下,Web 服务的实现都封装在 System.Web.Services

4、.WebService 这个类中。为了实现对数据库访问方式的 Web 服务的封装,我们必须定义一个新的类,它继承于 WebService 或是它的子类。对于相对简单的 Web 服务,我们直接让这个类继承于 WebService。这个生成的类就成了一个具体的 Web 服务。.NET 中新的关系型数据管理类都是基于类库中 System.Data 的一系列的名称空间,通常称这些名称空间集合为 ADO.NET。System . Data 包含用来访问和存储关系型数据的基础对象。Visual Studio.Net 直接给我们提供了 System.Data.SqlClient 和 OleDBClient两

5、个命名空间,这两个命名空间分别包含有用来访问 Sql Server 关系数据库和其他关系数据库所需的基本对象。其中以 Transaction 结尾的类提供了事务管理的功能,以 Connection 结尾的类用于连接具体的数据库。以 Command 结尾的类定义了对数据库表的操作。3 Web 服务中间件的实现服务中间件的实现3.1 实现框架下面是一个简单的 Web 服务中间件来实现(采用 Microsoft 推荐的 c #语言来编写)。为了实现中间件的可扩展性,我们决定不在中间件的 WebMethod(Web 方法)中直接实现对数据库的操作。我们先定义一个虚类 DBOperator,在这个虚类中

6、定义了对数据库操作的接口,包括数据库的打开(Open)和关闭(Close),事务的开始(BeginTrans)、事务的递交(CommitTrans)和回滚(RollbackTrans),没有返回值的 Sql 语句的执行(void ExecSql)和返回数据集的 Sql 语句的执行(DataSet ExecSql)。这样,我们的 Web服务中间件的每个 WebMethod 就仅仅是调用了 DBOperator 对象的相应的成员函数。比如 Web 服务中间件中的 Open 方法就是直接调用 DBOperator 对象的 Open 方法。3 .2 具体数据库操作的实现为了具体实现对数据库的操作,我们

7、需要定义 DBOperator 类的子类,我们以 SqlDBOperator 为例,显然 SqlDBOperator 具体实现了对 Sql Server 数据库的操作。首先定义一个 SqlDBOperator 类,它继承于 DBOperator,并导入名称空间 System . Data . SqlClient。using System.Data.SqlClient;class SqlDBOperator:DBOperator其次添加私有的数据成员 conn,trans,inTransaction,commprivate SqlConnection conn; /数据库连接 private S

8、qlTransaction trans; /事务处理类 private bool inTransaction=false; /指示当前是否正处于事务中private SqlCommand comm;/数据库操作命令处理类然后我们开始编写从 DBOperator 继承下来的 Open 操作的实现语句。public override void Open(string connStr) /如果连接是空的,就先通过 connStr 构造一个连接if(conn=null)conn=SqlConnection(connStr);/如果这个连接没有打开,就打开这个连接if(conn.State.ToStri

9、ng().ToUpper()!=“OPEN“) this.conn.Open(); 在实现了 Open(打开数据库)操作的编写之后,我们开始编写 Close(关闭数据库)操作。public override void Close() /如果连接是空的,则不用关闭if(conn=null)return;/如果这个连接已经打开,就关闭这个连接if(conn.State.ToString().ToUpper()=“OPEN“) this.conn.Open(); 事务处理功能的实现:首先是 BeginTrans(开始事务)操作的实现。public override void BeginTrans()

10、 /如果连接是空的,则没有事务可以开始if(conn=null)return;/*开始 conn 所属的事务,并将这个事务保存下来,同时设置 inTransaction(在事务中)标志为 true(真)。表示在进行事务处理*/trans=conn.BeginTransaction() ; inTransaction=true; 接下来是 CommitTrans(递交事务)操作的实现如下:public override void CommitTrans()trans.Commit(); /事务递交inTransaction=false;/在事务中标志变成 false;同理,RollbackTra

11、ns(回滚事务)操作的实现如下:public override void RollbackTrans ()trans.Rollback(); /事务回滚inTransaction=false;/在事务中标志变成 false;最后我们编写 ExecSql(执行 Sql 语句)操作的实现:public override void ExeSql(string strSql,string strParams,object strValues) /如果 comm(处理 Sql 语句的对象)为空,则生成这个对象if(comm=null)comm=new SqlCommand(); /设置这个对象的连接 c

12、onncomm.Connection=this.conn ; /判断是否在事务中,是就设置 comm 的事务对象属性if(inTransaction) comm.Transaction=trans; /判断参数个数和参数值个数是否相等,不等,就不能执行这个 Sql 语句if(strParams!=null) /设置这个 comm 对象的命令文本comm.CommandText=strSql; /将参数名称和对应的参数值保存到 comm 的参数数组中if(strParams!=null) for(int i=0;istrParams.Length;comm.Parameters.Add(strP

13、aramsi,strValuesi); /执行这个没有返回值的查询comm.ExecuteNonQuery(); 下面是有返回值的 ExecSql 操作的实现:public override DataSet ExeSqlForDataSet(string queryString) /如果 comm(处理 Sql 语句的对象)为空,则生成这个对象if(comm=null)comm=new SqlCommand(); /设置这个对象的连接 conncomm.Connection=this.conn ; /判断是否在事务中,是就设置 comm 的事务对象属性if(inTransaction) com

14、m.Transaction=trans; /生成一个数据集(DataSet)对象(ds),用它来保存返回的查询结果DataSet ds = new DataSet(); /定义一个 SqlDataAdpater 类的对象 ad。SqlDataAdapter ad = new SqlDataAdapter();/设置这个 comm 对象的命令文本comm.CommandText=queryString; /设置 ad 的 SelectCommand 属性为 commad.SelectCommand =comm; /ad 执行 fill 操作,结果保存到 ds 中ad.Fill(ds); /ds

15、返回return ds; 4 使用已定义的使用已定义的 Web 服务中间件来访问数据库的使用场合服务中间件来访问数据库的使用场合下面我们假设一种该中间件使用的具体情况:假设有一个私有的比较大型的书店,书店的老板家在离书店有一段距离,在书店和老板家之间架设局域网是不现实的,而老板需要在家里就可以使用书店的管理系统,甚至进行日常工作的管理。也就是说,老板需要实现在家里办公。为此,书店老板决定让某 IT 公司开发这个系统。某 IT 公司在接到该书店老板提出的开发意向后,在进行初步的系统调研之后,决定接下这个 IT 订单,由于这个书店老板并没有提出具体的解决方案(他也不懂),所以 IT 公司人员思考了

16、以下几个开发方案:在传统的解决方案中,我们可以采用了动态网页的编程方法,也就是建立一个网站,这样,在互联网的任何地方,我都可以通过这个网站进行访问,这种实现方法非常优秀,现有的很多公司门户就是使用了这种技术实现的。但是这种技术有一个缺点是,书店需要有自己的 Web 服务,这就增加了实现成本。同时这种方案的实现也抛弃了现有的解决方案(书店在建立初期就请某 IT 公司专门开发一个专用的书店管理系统),抛弃这个 Legacy(遗产),重新进行设计,书店老板也不愿意。另一个传统的解决方案是利用 Corba 或 DCOM 进行编程。原有系统就是利用 Visual C+进行编程的。所以可以选择 DCOM 进行编程,这也非常合理。但是这个方案限制了实现的平台,同时开发费用较高,毕竟利用 DCOM 进行编程开发和实现是一件比较复杂的工作。最后,公司决定利用 Web 服务技术封装原有的数据库访问层,这样我们的客户端仅需要进行数据库访问层的修改。这样

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号