• 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());

      }

      }

  • 相关阅读:
    图像的熵
    Tomcat6.0中JNDI的配置oracle11g
    JAVA错误:Syntax error on token "else", delete this token
    JAVA利用飞信接口发送短信
    更换ArcGIS 9.3授权ecp文件
    Java调用C++类库JNI
    jsp将变量传递给javascript函数
    windows xp文件夹共享,取消用户名密码输入
    WPF stringformat设置
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/flexdatabase.html
Copyright © 2020-2023  润新知