zoukankan      html  css  js  c++  java
  • Flex连接数据库(httpservice、asp.net、XML)

    Flex连接数据库(httpservice、asp.net、XML)

      众所周知,Flex是不能直接与数据库相连接的,Flex中提供了三种方式:HttpService,WebService和RemoteObject。后两者没研究过,不会,HttpService既可以直接获取XML中的数据,还可以通过JSP,ASP(asp.net)以及PHP读取数据库中的数据,这里主要记录Flex用HttpService通过asp.net读取并连接数据库。

      本文的流程大概是这样:通过asp.net先连接数据库(sql server 2005express),然后生成xml,再通过Flex的httpservice调用asp.net中生成的xml代码。用到的相关工具或技术包括Flex、asp.net(vs)、sqlserver 2005 express、XML、HttpService。

      一、先通过asp.net访问数据库,从数据库中读取数据,再生出XML文件。

      ①在asp.net中新建一个空的Default.aspx

      将下面一段代码删除

      <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

      <htmlxmlns="http://www.w3.org/1999/xhtml">

      <head runat="server">

      <title>无标题页</title>

      </head>

      <body>

      <form id="form1"runat="server">

      <div>

      </div>

      </form>

      </body>

      </html>

      只保留第一行代码

      <%@ Page Language="C#" CodeFile="Default.aspx.cs"Inherits="Default" %>

      ②再编写Default.aspx.cs这个文件

      using System;

      using System.Collections;

      using System.Configuration;

      using System.Data;

      using System.Linq;

      using System.Web;

      using System.Web.Security;

      using System.Web.UI;

      using System.Web.UI.HtmlControls;

      using System.Web.UI.WebControls;

      using System.Web.UI.WebControls.WebParts;

      using System.Xml.Linq;

      using System.IO;

      using System.Data.SqlClient;

      using System.Xml;

      public partial class Default :System.Web.UI.Page

      {

      protectedvoid Page_Load(object sender, EventArgs e)

      {

      //定义一个查询语句

      //auto为XML模式(包括RAW、服装团购网AUTO、化妆品团购网EXPLICIT三种)

      //XMLDATA,指定应返回XML-Data架构。文档的架构被预先设计为内嵌式架构。

      //elements,列作为子元素返回。

      string sql = "SELECT * FROM school FOR XMLauto,XMLDATA,elements";

      SqlConnection conn = newSqlConnection("Server=(local)\\SQLEXPRESS;uid=sa;pwd=;Database=student");//连接本地数据库

      SqlCommand cmd = new SqlCommand(sql,conn);//从数据库中查找数据

      conn.Open();//打开数据库

      XmlReader objXmlReader =cmd.ExecuteXmlReader();//定义一个对XML操作的读取器

      DataSet ds = newDataSet();//定义一个数据集

      ds.ReadXml(objXmlReader,XmlReadMode.Fragment);//将XML架构和数据读入数据集

      ds.WriteXml(Server.MapPath("XML.xml"));//将上述数据集中的数据写入XML.xml,.xml不存在会自动生出,与Default.aspx同一目录下

      conn.Close();//关闭数据库

      StreamReader sr = newStreamReader(Server.MapPath("XML.xml"));//定义sr,以数据流的方式读取数据

      Response.Clear();

      //指定好输出到客户端内容的编码方式

      Response.Charset = "gb2312";

      Response.ContentType = "test/xml";

      //Response.ContentEncoding =System.Text.Encoding.GetEncoding("gb2312");

      Response.Write(sr.ReadToEnd());//将sr中数据全部读取出来输出到客户端

      }

      }

      对①中,如果不删除后面代码,会产生错误“Prolog外部不能有DOCTYPE声明”,这是因为在CS文件中指定的Response.ContentType="text/xml";会与标签<!DOCTYPE>相矛盾。如果只把标签<!DOCTYPE>中的内容删掉,再运行页面,又会出现错误“XML文档只能有一个顶层元素。”,这是因为通过页面输出的XML内容都会有一个顶层元素<?xmlversion="1.0" encoding="gb2312" ?>。因为页面类型被指定为xml,xml文档只能有一个顶层元素。团购网站所以要把页面的设计文件(.aspx)文件中的标签全部删掉,只留下

      <%@ Page Language="C#" CodeFile="test.aspx.cs" Inherits="test"%>

      这一行。不难看出,这行是服务端标签,不会发送到客户端。

      对②中,数据库名为student,内含一张school表,如下图:

      运行页面,效果如下:

      

      [热门]Flex连接数据库(httpservice、asp.net、XML)

      

      二、通过Flex的HttpService调用asp.net中生成的xml代码

      Flex端代码(新建工程DataLink),在DataLink.mxml中:

      <?xml version="1.0"encoding="utf-8"?>

      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

      <mx:Panel x="10" y="10"width="475" height="400" layout="absolute"title="学生信息">

      <mx:DataGridx="20" y="20" id="dgPosts" width="400"dataProvider="{feedRequest.lastResult.Schema1.school}">

      <mx:columns>

      <mx:DataGridColumnheaderText="学号" dataField="XueHao"/>

      <mx:DataGridColumnheaderText="姓名" dataField="Name"/>

      <mx:DataGridColumnheaderText="年龄" dataField="Age"/>

      </mx:columns>

      </mx:DataGrid>

      <mx:ButtonfontSize="12" x="185" y="186" label="填充"click="feedRequest.send();"/>

      </mx:Panel>

      <mx:HTTPService id="feedRequest"url="http://localhost:/WebSite2/Default.aspx"useProxy="false"/>

      </mx:Application>

      运行界面如下(此时点击“填充”按钮没有任何效果):

      

      [热门]Flex连接数据库(httpservice、asp.net、XML)

      

      其中标签<mx:HTTPService>中的url,就是上面asp.net中Default.aspx运行时的网址www.cn403.com。

      三、整合一、二

      将DataLink工程下“bin-debug”文件夹下的AC_OETags.js、DataLink.html、DataLink.swf、playerProductInstall.swf四个文件(编译后的),复制到Default.aspx所处的文件夹中。再次运行DataLink.html,点击“填充”按钮,界面如下:

      

      [热门]Flex连接数据库(httpservice、asp.net、XML)

      

      至此,Flex连接数据库的操作已全部完工,本文一部分内容参考网上,在此记录下来,以备不时之需。

      PS:在“一”中的Default.aspx.cs下,这里还有另外一种写法,特此记录:

      protected override void Render(HtmlTextWriterwriter)

      {

      using (SqlConnection con = newSqlConnection("Server=(local)\\SQLEXPRESS;uid=sa;pwd=;Database=student"))

      {

      SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROMschool",con);

      DataTable dt = new DataTable();

      adapter.Fill(dt);

      dt.TableName = "aaa";

      dt.WriteXml("C:\\try.xml");

      StreamReader sr = new StreamReader("C:\\try.xml");

      Response.Clear();

      Response.ContentType = "test/xml";

      writer.Write(sr.ReadToEnd());

      }

      }

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/flexdatabase.html
Copyright © 2011-2022 走看看