创建数据库Web Services

系统 1614 0

XMLWebServices一个最显然的用处就是通用数据存取。通过它,你可以把公司的数据库被Internet上的许多客户端来访问,也可以动态地把它导入到第三方的Web站点上,甚至可以允许你的商业伙伴的WebServices去查询。下面就解释一下如何创建一个简单的WebServices,把你的数据库内容显示到InternetExplorer、第三方的WebServices和自定义的C#和VB.NET的客户端。

合作伙伴、客户、雇员在使用为多种设备设计的数据时已经有相当丰富的经验了,不管你现在的数据库是如何组织的,为了确保通用性,WebServices向客户端返回XML格式的数据。例如:假如一个物流公司(你的合作伙伴)准备把你的货物运送给你的客户,当运送车到达客户的门前时,他的PDA上显示出发送地址改变的信息,此时,运货车就很轻易地把它运送到别的地方去,那是因为你的客户在数据库里改变了他的地址,这种变化也自动地在你的合作伙伴的系统里自动更新了。

下面,就开始编写自己的ASP.NET数据库WebServices。首先,检查你的数据库,看它是否能够很轻易地就可以输出XML格式的数据,看看ADO.NET能否读出并进行动态转换。有些情况下,你可能需要对目前的数据库进行转换以满足这种需要。如果你的数据库访问代码变的很复杂,以致于会影响到伸缩性的情况,建议你对数据库进行转换。

为简单起见,这里假设例子中的数据库只有一个“Products”表。当然,你的数据库可能有许多表,也可能你的WebServices需要访问不止一个数据库。

现在,我们就可以开始写代码了。打开VisualStudio.NET,在DataBaseWebService目录下创建一个C#的ASP.NETWebServices项目,如图:



在Service1.asmx上点击右键,把Service1.asmx更名为DataBaseWebService.asmx,这个文件将会包含有从数据库得到数据的WebMethods,然后,点击右键,选择“查看代码”,切换到代码视图,更改为DataBaseWebService类和构造器的名字。

先在开始处引用.NET的类库:

        
          
            using
          
           System.Data.SqlClient;

          
            using
          
           System.Data.OleDb;
        
      


然后更改类的名字为DataBaseWebService:

        
          
        
              


在HelloWorld方法的结尾处写上自己的方法代码,第一个方法SQLDB用来访问SQLServer数据库,它处理客户端发送的SQLServer查询,SQLDB的参数从浏览器地址栏传送的查询语句,所有的WebMethod方法的代码都有try/catch语句,用来处理查询失败时输出一些错误信息。如果WebMethod方法在运行时出现例外,catch语句产生一个数据集,是一个包含错误信息的Error表。

SQLDB方法首先创建并打开SQL数据库连接,连接字符串在你的服务器上应当是唯一的,做为例子,我们使用VisualStudio.NET安装时自带的示例数据库;接下来,SQLDB方法创建SQL数据适配器,参数QUERY用来决定要返回的数据记录;最后产生查询结果的数据集,并一XML格式,并以Results为根节点的结果。代码如下:

        
          [WebMethod]

          
            public
          
           DataSet SQLDB(
          
            string
          
           Query)
{
    
          
            try
          
          
    {
        SqlConnection CS = 
            
          
            new
          
           SqlConnection(
          
            "server=(local)//NetSDK;database=Northwind;Trusted_Connection=yes"
          
          );
        SqlDataAdapter myCommand = 
          
            new
          
           SqlDataAdapter(Query, CS);
        DataSet myDataSet = 
          
            new
          
           DataSet();
        myCommand.Fill(myDataSet, 
          
            "Results"
          
          );
        
          
            return
          
           myDataSet;
    }
    
          
            catch
          
           (Exception ex)
    {
        
          
            return
          
           DataError(ex);
    }
}
        
      


用来查询ACCESS数据库的方法与SQL基本相同,为了大家测试方便,全部代码如下:

        
          [WebMethod]

          
            public
          
           DataSet AccessDB(
          
            string
          
           Query)
{
    
          
            try
          
          
    {
        
          
            string
          
           strAccessConn = 
          
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
          
          
               + 
          
            this
          
          .Server.MapPath(
          
            "AccessWebServices.mdb"
          
          );
        OleDbConnection myAccessConn = 
          
            new
          
           OleDbConnection(strAccessConn);
        OleDbCommand myAccessCommand = 
          
            new
          
           OleDbCommand(Query, myAccessConn);
        OleDbDataAdapter myDataAdapter = 
          
            new
          
           OleDbDataAdapter(myAccessCommand);
        myAccessConn.Open();
        DataSet myDataSet = 
          
            new
          
           DataSet();
        myDataAdapter.Fill(myDataSet, 
          
            "Results"
          
          );
        myAccessConn.Close();
        
          
            return
          
           myDataSet;
    }
    
          
            catch
          
           (Exception ex)
    {
        
          
            return
          
           DataError(ex);
    }
}
        
      


最后写上处理错误的方法:

        
          
            public
          
           DataSet DataError(Exception ex)
{
    DataSet errDS = 
          
            new
          
           DataSet(
          
            "Errors"
          
          );
    DataTable errTable = errDS.Tables.Add(
          
            "Error"
          
          );
    errTable.Columns.Add(
          
            "Message"
          
          );
    errTable.Rows.Add(
          
            new
          
           Object[] { ex.Message });

    
          
            return
          
           errDS;
}
        
      


现在,你就可以编译该项目了,看看你的WebServices是否能正常工作。如果能正常工作,结果将如下所示:

单击显示全图,Ctrl+滚轮缩放图片

然后选择您的数据库类型,如下图所示:

单击显示全图,Ctrl+滚轮缩放图片

选择AccessDB(注意:在进行此操作之前,请先建立数据库AccessWebServices.mdb,并建立表AcessTableTest,并放到DataBaseWebService目录之下),在Query里输入“select*fromAcessTableTest”,然后点“Invoke”,你就会得到一个XML格式的查询结果,显示如下:

单击显示全图,Ctrl+滚轮缩放图片

如果出现上图类似的结果,说明你的WebServices能够使用了。

如果再配合XSL,就可以产生可以浏览的HTML页面了,你也可以直接在地址栏里输入:http://localhost/DataBaseWebService/DataBaseWebService.asmx/AccessDB?Query=select+*+from+AcessTableTest得到想要的数据。

下面用C#写一个使用该WebServices的客户端应用程序。新建一个Windows应用程序的VS.NET项目,名为WebServicesClient,在解决方案浏览器上点右键,选择添加Web引用,在弹出的对话框里输入:

http://localhost/DataBaseWebService/DataBaseWebService.asmx



然后点击“添加引用”,VS.NET就会把所需要的文件添加到你的项目里。在From1上添加菜单,并添加两个菜单项,“得到SQLServer产品列表”和“得到Access产品列表”,要使用我们刚才创建的WebServices,先创建WebServices的一个实例,如下所示:

        
          
            private void
          
           menuItem1_Click(
          
            object
          
           sender, System.EventArgs e)
{
    WebServicesClient.localhost.DataBaseWebService Database 
        = 
          
            new
          
           WebServicesClient.localhost.DataBaseWebService();
    DataSet ds = Database.SQLDB(
          
            "select * from Products"
          
          );
    dataGrid1.DataSource = ds.Tables[0];
}


          
            private void
          
           menuItem2_Click(
          
            object
          
           sender, System.EventArgs e)
{
    WebServicesClient.localhost.DataBaseWebService Database
        = 
          
            new
          
           WebServicesClient.localhost.DataBaseWebService();
    DataSet ds = Database.AccessDB(
          
            "select * from AcessTableTest"
          
          );
    dataGrid1.DataSource = ds.Tables[0];
}
        
      


最后,运行新建立的Window应用程序,就可以分别得到我们刚才所举的数据库里的数据了。如下图所示:

单击显示全图,Ctrl+滚轮缩放图片

创建数据库Web Services


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论