Web服务数据库访问中间件的实现
发表于:2008-04-24来源:作者:点击数:
标签:数据库中间件
关键字: 中间件 1 引言 随着Intr .net /Internet 网络 的迅猛发展,面向网络的分布式 数据库 成为支持Internet服务的关键,传统的数据库访问技术已渐渐不能满足分布式应用集成的需要。 【1】利用新技术,研究和 开发 新的数据库访问中间件成为数据库研究领域
关键字:
中间件1 引言
随着Intr
.net/Internet
网络的迅猛发展,面向网络的分布式
数据库成为支持Internet服务的关键,传统的数据库访问技术已渐渐不能满足分布式应用集成的需要。
【1】利用新技术,研究和
开发新的数据库访问中间件成为数据库研究领域的主要方向之一。
Web服务是一种崭新的分布式计算模型,基于一系列开放的技术标准,其松散耦合、语言中立、平台无关性、开放性使得它将成为下一代电子商务的架构,成为下一代的WWW。
【2】Microsoft.Net提供了基于“.Net框架”的综合开发平台,它提供了涉及客户端、
服务器和服务的单独、统一的编程模型。
“.Net框架”和Visual Studio.Net一起,给我们提供了一个完整的应用程序开发平台。
本文主要的工作就是在Visual Studio.Net平台上,利用Web服务将现有的数据库访问方式的封装成中间件,使得封装后的中间件可以满足分布式应用的需要。
2 Web服务中间件接口的定义
现有通用的数据库访问方式,它的主要操作有:设置数据库连接,打开和关闭数据库, 执行查询和执行其他的Sql语句,实现事务管理和缓冲池管理。比较先进的数据库访问方式还支持实时数据库连接。因此,为了实现对传统数据库访问方式的封装,我们首先要定义一个Web服务,这个Web服务至少应该拥有以上所列的Web方法(属性为WebMethod的public函数成员)。这些方法就组成了这个Web服务的接口。
.Net下,Web服务的实现都封装在System.Web.Services.WebService这个类中。为了实现对数据库访问方式的Web服务的封装,我们必须定义一个新的类,它继承于WebService或是它的子类。对于相对简单的Web服务,我们直接让这个类继承于WebService。这个生成的类就成了一个具体的Web服务。
.NET中新的关系型数据管理类都是基于类库中System.Data的一系列的名称空间,通常称这些名称空间集合为ADO.NET。System . Data包含用来访问和存储关系型数据的基础对象。Visual Studio.Net直接给我们提供了System.Data.SqlClient和OleDBClient两个命名空间,这两个命名空间分别包含有用来访问Sql Server关系数据库和其他关系数据库所需的基本对象。其中以Transaction结尾的类提供了事务管理的功能,以Connection结尾的类用于连接具体的数据库。以Command结尾的类定义了对数据库表的操作。
3 Web服务中间件的实现
3.1实现框架
下面是一个简单的Web服务中间件来实现(采用Microsoft推荐的c #语言来编写)。为了实现中间件的可扩展性,我们决定不在中间件的WebMethod(Web方法)中直接实现对数据库的操作。我们先定义一个虚类DBOperator,在这个虚类中定义了对数据库操作的接口,包括数据库的打开(Open)和关闭(Close),事务的开始(BeginTrans)、事务的递交(CommitTrans)和回滚(RollbackTrans),没有返回值的Sql语句的执行(void ExecSql)和返回数据集的Sql语句的执行(DataSet ExecSql)。这样,我们的Web服务中间件的每个WebMethod就仅仅是调用了DBOperator对象的相应的成员函数。比如Web服务中间件中的Open方法就是直接调用DBOperator对象的Open方法。
3 .2具体数据库操作的实现
为了具体实现对数据库的操作,我们需要定义DBOperator类的子类,我们以SqlDBOperator为例,显然SqlDBOperator具体实现了对Sql Server数据库的操作。
首先定义一个SqlDBOperator类,它继承于DBOperator,并导入名称空间System . Data . SqlClient。
using System.Data.SqlClient;
class SqlDBOperator:DBOperator
其次添加私有的数据成员conn,trans,inTransaction,comm
private SqlConnection conn; //数据库连接
private SqlTransaction 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.ToString().ToUpper()!="OPEN")
this.conn.Open();
}
在实现了Open(打开数据库)操作的编写之后,我们开始编写Close(关闭数据库)操作。
原文转自:http://www.ltesting.net