且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务

更新时间:2022-09-22 10:54:11

已经隔了好长时间了,我向广大博友先道歉,最近工作比较忙,这片文档也是今天抽出时间来完成的,不过我还是会像现在这样抽时间来完成这个系列。
    在《Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务》这篇随笔中我们讲了如何使用Web Services的Soap消息的SoapHeader来传递参数,为此我们改变了在《Web服务初探:用Demo学Web服务系列(3)——用C/S程序调用Web服务》中的C/S程序和《Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务》中编写的WebService方法。这次我们来讲解一下将方法改变成从数据库中来验证用户的登录,这个只需要改变《Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务》中的WebService而不用再变动已经做过更改的C/S程序。
    在讲解之前,我要提到的一点是在我们的《ASP.NET AJAX技术联盟》QQ群中有人问到用Web Services如何实现三层结构。我们来看看三层结构的情况如下:

底层:数据库服务器(存放数据库执行SQL语句);中间层:Web Services(用来接收参数后执行组织出需要执行的SQL语句,发送给底层,并将SQL语句执行后的结果用Soap消息返回给应用层);应用层:各种C/S程序软件或B/S程序软件(为了适合用户各种需求而设计的必须达到的某些功能或模块的程序,为了实现所需的功能和模块,产生一些参数发送给中间层,并对返回数据处理和显示)。

    相信说道这里应该有人明白了这三个层次的简单分工了,也应该知道哪些代码应该放到哪个层中去写来实现上述的层次。当然不可否认,这里的分层理论说明的并不是很科学,比如:中间层和应用层之间有很多模糊的地方,对于界面的风格,按钮的设计等等类似的功能风格设计可以不用写在中间层,而放到应用层。对于数据库的访问则放在中间层,应用层并不对数据库做直接读写工作。(这只是个人的见解,如果还有人有更好的发方法也希望互相交流。)
    好了,言归正传,我们是如何让一个WebService访问数据库的呢?我们这里有两个方法。这两个方法也是.NET本身提供给我们的ADO.NET的方法,一样适用于在WebService中使用,一种是连接模式,一种是断开模式。
我们首先来看连接模式,在下一篇随笔中再来看看断开模式。按照惯例,我们仍然将改变前后的WebService给大家粘贴出来。
改变前的WebService
 1Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System;
 2Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Web;
 3Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Web.Services;
 4Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Web.Services.Protocols;
 5Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
 6Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务public class MyServiceClassHeader : SoapHeader
 7Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务{
 8Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    public string UsN;
 9Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    public string PaW;
10Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务}

11Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务[WebService(Namespace = "http://tempuri.org/")]
12Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
13Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务public class MyServiceClass : System.Web.Services.WebService
14Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务{
15Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    public MyServiceClass()
16Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    {
17Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
18Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        //如果使用设计的组件,请取消注释以下行 
19Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        //InitializeComponent(); 
20Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    }

21Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
22Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    public MyServiceClassHeader MSCH;
23Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
24Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    [WebMethod]
25Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    [SoapHeader("MSCH",Direction = SoapHeaderDirection.In)]
26Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    public string Login()
27Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    {
28Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        if (MSCH != null)
29Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        {
30Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            if (MSCH.MustUnderstand)
31Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            {
32Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                string UserName = MSCH.UsN;
33Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                string PassWord = MSCH.PaW;
34Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                if (UserName == "Micky" && PassWord == "micky0")
35Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                {
36Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                    return "登录成功!";
37Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                }

38Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                else
39Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                {
40Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                    return "登录错误!";
41Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                }

42Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            }

43Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            else
44Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            {
45Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务                return "消息头不是必懂的!";
46Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            }

47Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        }

48Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        else
49Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        {
50Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务            return "无头消息!";
51Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务        }

52Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    }

53Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务}
改变后的WebService(实际上我们是改变并增加了访问数据库的代码)
Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务改变后的WebService
因为上面代码太长,所以我们把代码折叠了。这里当然是要在数据库中建立一张表,通过代码的“Selece”语句中的字段。注:本来是想使用Access数据库,但在Visual Studio.Net2005中有简易的Sql Server2005,所以就用的Sql Server2005,您也可以使用Access建立数据库,表中的字段都是一样的,唯一的区别是在引用、代码和Web.Config中的区别,别忘了把数据库文件也放到工程系统文件夹“App_Data”下面,我们来看看引用和Web.Config的区别:
一、使用Sql Server2005数据库需要添加的引用:
Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Data.SqlClient;
二、使用Access2003数据库需要添加的引用:
Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Data.OleDb;
三、无论使用哪个数据库都要添加的引用(为的是访问此WebService中的Web.Config):
Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务using System.Web.Configuration;
Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
using System.Configuration;
四、使用Sql Server2005数据库需要添加改变的Web.Config:
1Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务<configuration>
2Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <appSettings/>
3Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务  <connectionStrings>
4Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <add name="WSConStringSQL" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\WSDemoDB.mdf;Integrated Security=True;User Instance=True"
5Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务      providerName="System.Data.SqlClient" />
6Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务  </connectionStrings>
7Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <system.web>
五、使用Access2003数据库需要添加改变的Web.Config:
1Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务<configuration>
2Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <appSettings/>
3Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务  <connectionStrings>
4Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <add name="WSConStringSQL" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\WSDemoDB.mdb;Persist Security Info=True"
5Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务      providerName="System.Data.OleDb" />    
6Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务  </connectionStrings>
7Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务    <system.web>

别忘了在数据库中输入一条数据哦。使用Access2003数据库时记得将代码中的SqlConnection换为OleDbConnection,SqlCommand换为OleDbCommand,SqlDataReader换为OleDbDataReader。
    其实今天Demo和WebService的本身知识关系不是很大,而与ADO.NET2.0的关系却很大,所以就不过到解释了,大家可以根据代码和相关书籍研究。

    你仍然可以通过前面的C/S程序,把代理类更新一下,然后运行测试。输入你数据库中所给的数据,再输入一个数据库中没有的数据,看看是什么结果呢?
    顺便再说一句:这个就是一个简单的三层结构,当然这个WebService编写的不是很通用,但结构却是三层结构的特征,你能理解了吗?



本文转自刚刚博客园博客,原文链接:http://www.cnblogs.com/lijigang/archive/2006/11/14/559828.html,如需转载请自行联系原作者