手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

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

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

   comm.Connection=this.conn ;
//判断是否在事务中,是就设置comm的事务对象属性
if(inTransaction)
   comm.Transaction=trans;
//判断参数个数和参数值个数是否相等,不等,就不能执行这个Sql语句
if((strParams!=null)&&(strParams.Length!=strValues.Length) )
throw new Exception("查询参数和值不对应!");
//设置这个comm对象的命令文本
comm.CommandText=strSql;
   //将参数名称和对应的参数值保存到comm的参数数组中
if(strParams!=null)
{
   for(int i=0;i<strParams.Length;comm.Parameters.Add(strParams[i],strValues[i]));
}
//执行这个没有返回值的查询
  comm.ExecuteNonQuery();
}


下面是有返回值的ExecSql操作的实现:
public override DataSet ExeSqlForDataSet(string queryString)
{
//如果comm(处理Sql语句的对象)为空,则生成这个对象
if(comm==null)
comm=new SqlCommand();
//设置这个对象的连接conn
   comm.Connection=this.conn ;
   //判断是否在事务中,就是设置comm的事务对象属性
if(inTransaction)
   comm.Transaction=trans;
//生成一个数据集(DataSet)对象(ds),用它来保存返回的查询结果
DataSet ds = new DataSet();
//定义一个SqlDataAdpater类的对象ad。
   SqlDataAdapter ad = new SqlDataAdapter();
//设置这个comm对象的命令文本
comm.CommandText=queryString;
   //设置ad的SelectCommand属性为comm。
//SelectCommand是DataAdapter对象的一个属性,表示Transact-SQL语句或存储过程,用于在数据源中选择记录。
ad.SelectCommand =comm;
   //ad执行fill操作,结果保存到ds中
ad.Fill(ds);
   //ds返回
return ds;
}

4 使用已定义的Web服务中间件来访问数据库的使用场合
下面我们假设一种该中间件使用的具体情况:
假设有一个私有的比较大型的书店,书店的老板家在离书店有一段距离,在书店和老板家之间架设局域网是不现实的,而老板需要在家里就可以使用书店的管理系统,甚至进行日常工作的管理。也就是说,老板需要实现在家里办公。为此,书店老板决定让某IT公司开发这个系统。
某IT公司在接到该书店老板提出的开发意向后,在进行初步的系统调研之后,决定接下这个IT订单,由于这个书店老板并没有提出具体的解决方案(他也不懂),所以IT公司人员思考了以下几个开发方案:
在传统的解决方案中,我们可以采用了动态网页的编程方法,也就是建立一个网站,这样,在互联网的任何地方,我都可以通过这个网站进行访问,这种实现方法非常优秀,现有的很多公司门户就是使用了这种技术实现的。但是这种技术有一个缺点是,书店需要有自己的Web服务,这就增加了实现成本。同时这种方案的实现也抛弃了现有的解决方案(书店在建立初期就请某IT公司专门开发一个专用的书店管理系统),抛弃这个Legacy(遗产),重新进行设计,书店老板也不愿意。
另一个传统的解决方案是利用Corba或DCOM进行编程。原有系统就是利用Visual C 进行编程的。所以可以选择DCOM进行编程,这也非常合理。但是这个方案限制了实现的平台,同时开发费用较高,毕竟利用DCOM进行编程开发和实现是一件比较复杂的工作。
最后,公司决定利用Web服务技术封装原有的数据库访问层,这样我们的客户端仅需要进行数据库访问层的修改。这样,系统原来的界面不便,Business层(业务层)不变,改变的仅仅是客户端的的数据库访问层的实现。以上就是这个Web服务使用的具体场合。
下面我们在Visual Studio.Net平台上利用c# Windows应用程序编程项目来说明该Web服务的使用。
首先新建一个C# Windows应用程序项目,在窗体上添加控件,一个DataGrid和一个按钮。
然后添加Web引用,将该Web服务中间件所在的asmx文件地址添加到Web引用中。这样我们就可以直接使用这个服务了。
双击按钮1,编程如下:
//新建一个Web服务的实例
WebReference.ServiceWSDBM the=new WindowsApplication1.WebReference.ServiceWSDBM();
//以数据库连接字符串为参数,打开上面的连接字符串所可以连接的数据库
the.Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False");
the.Open();
//对已经打开的数据库进行查询操作,返回记录集。
System.Data.DataSet ds=the.exeSqlForDataSet("select * from products");
//将查询得到的记录集显示在DataGrid中
dataGrid1.DataSource=ds;
dataGrid1.DataMember=ds.Tables[0].TableName;
//关闭这个连接
the.Close();
执行结果,在DataGrid中将显示出连接上的Sql Server库中的products表中的内容。
5 结束语
根据以上的介绍,基于Web服务实现的数据库访问中间件,可以扩展数据库系统的应用范围,这种中间件不仅适应于局域网,更加适应于未来的基于广域网的应用程序。这个中间件于传统中间件相比有以下优点: 1)跨平台。2)使用方便,可以将这个Web服务可以象本地组件一样被应用。3)兼容性强,扩展方便,比如我们想要增加对Oracle的支持,仅需下载和Oracle有关的.Net插件(下载地址:可到http://msdn.microsoft.com/downloads/上下载.Net Framework Data Provider for Oracle),然后将上述程序中的Sql替换为Oracle即可。综上所述,基于Web服务实现数据库访问中间件将是一种比较有效的解决方案。

原文出处:http://www.ahcit.com/lanmuyd.asp?id=1153

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!