[原]flash研究(二)——与asp.net服务交互(访问数据库)

前一篇文章写了flash本地通信的方法,这篇文章主要研究一下flash访问数据库的方法。一个完整的flash访问数据库的程序,包括两部分,一是flash端请求程序,一是服务端接收到请求处理并返回数据的程序。这就类似一个aspx网页,每一个aspx页面都对应着一个aspx.cs文件,aspx页面将数据以各种形式呈现给用户,而呈现的数据是aspx.cs文件提供的。Flash程序也一样,flash端只负责将数据以不同的形式表现给用户,而表现的这些数据是服务程序提供的,flash通过自身的提供的方法向服务端发送请求,服务端接收到参数后访问数据库取得数据,并以一定的格式返回,flash端再通过自身指定的对象接收服务端返回的数据,并将其展现出来,这就完成了一次flash与后台程序或者说flash通过后台程序访问数据库的操作。

下面重点将三种flash请求和接收数据的方法

一、loadVariables

loadVariables(url:String, target:Object, [method:String]) : Void

url:服务端地址。

target:指向接收所加载变量的影片剪辑的目标路径。

method: [可选] - 指定用于发送变量的 HTTP 方法。该参数必须是字符串 GETPOSTGET方法将变量附加到 URL 的末尾,它用于发送少量的变量。POST方法在单独的 HTTP 标头中发送变量,它用于发送长字符串的变量。

:一个简单的flash与数据库交互的例子,当鼠标移动到按钮上时,在鼠标旁边以文本框的形式显示按钮的信息(按钮的信息在数据库中存储)。

Flash端请求数据代码

[原]flash研究(二)——与asp.net服务交互(访问数据库)function ShowInfo()
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    loadVariables(
"http://10.72.25.203/flashy/FlashService.aspx", _root, "POST");
[原]flash研究(二)——与asp.net服务交互(访问数据库)    hezuo_btn.label 
= "";
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)

这样将根影片剪辑上的所有变量发送给了一个aspx服务,并指定用根影片剪辑_root,来接收服务端返回的数据,这样适合变量较少的情况,因为这中方法是将根影片剪辑上的所有变量都发送到了服务端,如果想有选择的对变量进行发送,可用?变量名1=变量1&变量名2=变量2  这种方式来发送。

Flash端接收服务端返回数据的代码:

[原]flash研究(二)——与asp.net服务交互(访问数据库)_root.onData = function() 
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    _root.createTextField(
"textV",3,this._xmouse-50,this._ymouse-50,100,35);
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.border 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.borderColor 
= 0x33BDCC;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.background 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.backgroundColor 
= 0x33BDCC;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV._alpha 
= 40;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.multiline 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.wordWrap 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.text 
= you;
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)

用根影片剪辑的onData事件接收,并将接收到的数据(存储在变量you中)用文本域的形式显示。

Flash按钮事件和发送变量的定义代码:

[原]flash研究(二)——与asp.net服务交互(访问数据库)var zhan_name:String;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)play1_btn.onRollOver 
= function()[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    zhan_name 
= "合作";        
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo();
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)play2_btn.onRollOver 
= function()[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    zhan_name 
= "百口泉";        
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo();
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)play3_btn.onRollOver 
= function()[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    zhan_name 
= "重油";        
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo();
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

注意代码写完后在发布设置中将本地回放安全性设为:只访问网络(后面的例子全部做相同的设置)。

[原]flash研究(二)——与asp.net服务交互(访问数据库)

服务端接收代码:

[原]flash研究(二)——与asp.net服务交互(访问数据库)Request.Form["zhan_name"];

注意如果用URLPar1=Value1&Par2=Value2这种方式发送请求,接收代码应写为:

[原]flash研究(二)——与asp.net服务交互(访问数据库)Request.QueryString["zhan_name "];

服务端返回给flash数据的代码

[原]flash研究(二)——与asp.net服务交互(访问数据库)Response.Write("you=返回的数据数据");

   服务端完整代码:

[原]flash研究(二)——与asp.net服务交互(访问数据库)using System;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Data;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Configuration;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web.Security;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web.UI;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web.UI.WebControls;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web.UI.WebControls.WebParts;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Web.UI.HtmlControls;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
using System.Data.OracleClient;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)
public partial class _Default : System.Web.UI.Page
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    OracleConnection OraCnn;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    OracleCommand OC;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    OracleDataAdapter OA;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
protected void Page_Load(object sender, EventArgs e)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OraCnn 
= new OracleConnection(GetDataInfo());
[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
private string GetDataInfo()
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleConnectionStringBuilder OS 
= new OracleConnectionStringBuilder();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OS.UserID 
= "sdptest";
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OS.Password 
= "sdptest";
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OS.DataSource 
= "ORA116";
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
return OS.ConnectionString;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
public void GetDataFromtoreProcedure()
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        Response.Write(
"you=");
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OraCnn.Open();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OC 
= new OracleCommand("oilstore.oilstore", OraCnn);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OC.CommandType 
= CommandType.StoredProcedure;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleParameter OracleP1 
= new OracleParameter("ZName", OracleType.VarChar, 10);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleP1.Direction 
= ParameterDirection.Input;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleP1.Value 
= Request.Form["zhan_name"];
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleParameter OracleP2 
= new OracleParameter("C", OracleType.Cursor);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OracleP2.Direction 
= ParameterDirection.Output;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OC.Parameters.Add(OracleP1);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OC.Parameters.Add(OracleP2);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OA 
= new OracleDataAdapter(OC);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        DataTable DT 
= new DataTable();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OA.Fill(DT);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        OraCnn.Close();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
if (DT.Rows.Count > 0)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            
string curyou = string.Empty;
[原]flash研究(二)——与asp.net服务交互(访问数据库)            
for (int i = 0; i < DT.Rows.Count; i++)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)            
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)                
for (int j = 0; j < DT.Columns.Count; j++)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)                
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)                    curyou 
+= DT.Rows[i][j] + " ";
[原]flash研究(二)——与asp.net服务交互(访问数据库)                }

[原]flash研究(二)——与asp.net服务交互(访问数据库)            }

[原]flash研究(二)——与asp.net服务交互(访问数据库)            Response.Write(curyou);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        }

[原]flash研究(二)——与asp.net服务交互(访问数据库)        
else
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            Response.Write(
"无数据!");
[原]flash研究(二)——与asp.net服务交互(访问数据库)        }

[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

服务端接收到变量zhan_name后,通过Oracle存储过程取数据,然后返回,注意返回形式:Response.Write("you="),将返回的结果集赋给了变量youflash端可以接收到you的值,注意这种方式一次只能够返回一个变量,如果这样写:Response.Write("you=132qi234"),这样flash是读不出qi的,读出you的值是:132qi234

二、LoadVars

LoadVars类的load,sendsendAndLoad方法也可以像loadVariables一样向服务端发送并接收数据,但要比loadVariables合理的多,因为loadVariables每次将当前影片剪辑内的所有变量都发向了服务端,这很可能将我们不希望发送的数据也发送了过去,同时服务端也只能向flash返回一个变量,而LoadVars类就解决了这些问题。

我们先看看LoadVars类的方法和事件:

方法:

LoadURL):LoadVars对象内容发送到指定的URL服务地址。

SendURL [,目标窗口,传送方式]):从指定的URL服务地址加载数据。

sendAndLoadURL,接收对象,[传送方式]):LoadVars对象内容发送到指定的URL服务地址,并接收服务端返回的值。

getBytesLoaded()返回目前加载数据的字节数。

事件:

onLoadsuccess):数据加载完触发,并传入参数,success的值为true,表示加载成功,否则加载失败。

       例:将上面的例子改用LoadVars实现,并优化一下,增加了发送到服务端的变量个数,返回数据到XML文件中。整个代码如***释较全,不再做解释。

[原]flash研究(二)——与asp.net服务交互(访问数据库)//全局时间和服务地址变量
[原]flash研究(二)——与asp.net服务交互(访问数据库)
var formattedDate:String;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
var URLString:String;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
//防止多个flash之间变量冲突
[原]flash研究(二)——与asp.net服务交互(访问数据库)
this._lockroot = true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
//初始化函数
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
function init() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    URLString 
= "http://10.72.25.203/flashy/FlashService.aspx";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    formattedDate 
= getDateStr();
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
//初始化按钮属性
[原]flash研究(二)——与asp.net服务交互(访问数据库)
    SiChuanShengMa_btn.Func = "四川盛马";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    DuShiHua_btn.Func 
= "独石化";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    KeShiHua_btn.Func 
= "克石化";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    WuShiHua_btn.Func 
= "乌石化";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    XiBuGuanDao_btn.Func 
= "西部管道";
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)
//按钮事件,鼠标移动到按钮上时动态生成文本域显示数据
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
SiChuanShengMa_btn.onRollOver = function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo(SiChuanShengMa_btn.Func, formattedDate);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)DuShiHua_btn.onRollOver 
= function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo(DuShiHua_btn.Func, formattedDate);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)KeShiHua_btn.onRollOver 
= function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo(KeShiHua_btn.Func, formattedDate);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)WuShiHua_btn.onRollOver 
= function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo(WuShiHua_btn.Func, formattedDate);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)XiBuGuanDao_btn.onRollOver 
= function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    ShowInfo(XiBuGuanDao_btn.Func, formattedDate);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
//鼠标离开按钮时,文本域隐藏
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
SiChuanShengMa_btn.onRollOut = SiChuanShengMa_btn.onReleaseOutside=DuShiHua_btn.onRollOut=DuShiHua_btn.onReleaseOutside=KeShiHua_btn.onRollOut=KeShiHua_btn.onReleaseOutside=WuShiHua_btn.onRollOut=WuShiHua_btn.onReleaseOutside=XiBuGuanDao_btn.onRollOut=XiBuGuanDao_btn.onReleaseOutside=function () [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV._visible 
= false;
[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
//动态生成文本域函数
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
function ShowTextField(you:String) [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    _root.createTextField(
"textV"3this._xmouse+10this._ymouse-512070);
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.border 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.borderColor 
= 0x802A2A;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.background 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.html 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.backgroundColor 
= 0x7CFC00;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.multiline 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.wordWrap 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
if (you != null[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        textV.htmlText 
= you;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    }
 else [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        textV.htmlText 
= "正在加载数据[原]flash研究(二)——与asp.net服务交互(访问数据库)";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)    infoFormat 
= new TextFormat();
[原]flash研究(二)——与asp.net服务交互(访问数据库)    infoFormat.font 
= "黑体";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    infoFormat.size 
= 12;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    infoFormat.color 
= 0x000000;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV._alpha 
= 90;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.embedFonts 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV.setTextFormat(infoFormat);
[原]flash研究(二)——与asp.net服务交互(访问数据库)    textV._visible 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)
//为按钮请求服务端数据函数
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
function ShowInfo(ZName:String, myDate:String) [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
var ReplyXML:XML = new XML();
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    ReplyXML.onLoad 
= function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
var resultXML:XML = new XML();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//忽略空节点
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        resultXML.ignoreWhite = true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        resultXML.parseXML(
this);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
var contentValue:String = "";
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
var e:XMLNode = resultXML.firstChild.firstChild;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        contentValue 
+= e.lastChild.firstChild.nodeValue;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        
if (e.lastChild.nodeName == "提示信息"[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            ShowTextField(contentValue);
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        }
 else [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            ShowTextField(
"无数据!");
[原]flash研究(二)——与asp.net服务交互(访问数据库)        }

[原]flash研究(二)——与asp.net服务交互(访问数据库)    }
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
//实例化LoadVars类,用其发送数据到服务端,并且返回数据到XML类
[原]flash研究(二)——与asp.net服务交互(访问数据库)
    var send_lv:LoadVars = new LoadVars();
[原]flash研究(二)——与asp.net服务交互(访问数据库)    send_lv.flashPar1 
= ZName;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    send_lv.flashPar2 
= myDate;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    send_lv.sendAndLoad(URLString, ReplyXML);
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

[原]flash研究(二)——与asp.net服务交互(访问数据库)
//获取当前系统时间
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
function getDateStr():String [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
var myDate:Date = new Date();
[原]flash研究(二)——与asp.net服务交互(访问数据库)    
return myDate.getFullYear()+"-"+(myDate.getMonth()+1)+"-"+myDate.getDate();
[原]flash研究(二)——与asp.net服务交互(访问数据库)}

注意:发布生成的swf文件必须在iis里面发布用“http://...”地址来访问,或者做下面设置,否则直接打开是加载不上数据的(flash播放器的安全性阻止了数据访问)。

本地访问设置步骤:

1、在flash播放器上点击右键/设置/高级

[原]flash研究(二)——与asp.net服务交互(访问数据库)

       2、在打开的网页上面点击全局安全性设置面板

 

[原]flash研究(二)——与asp.net服务交互(访问数据库)

   点击编辑位置,将生成的swf位置添加进去,关掉网页,OK了。

 

服务端接收参数的方法和loadVariables相同,不同的是返回数据的时候返回的是一个xml文件,返回数据的代码如下:

[原]flash研究(二)——与asp.net服务交互(访问数据库)public void GetDataFormStoreProcedure(string SPName, string dateTime, string organiseName)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
if (SPName == null || SPName == "")
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            Response.Write(
"<?xml version='1.0' encoding='utf-8'?><RootName>无数据!</RootName>");
[原]flash研究(二)——与asp.net服务交互(访问数据库)        }

[原]flash研究(二)——与asp.net服务交互(访问数据库)        
else
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)        
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)            
try
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)            
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCnn.Open();
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCmmd 
= new OracleCommand(SPName, m_OracleCnn);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCmmd.CommandType 
= CommandType.StoredProcedure;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OracleParameter OraclePar1 
= new OracleParameter("P_RQ", OracleType.DateTime);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OraclePar1.Direction 
= ParameterDirection.Input;
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OraclePar1.Value 
= dateTime;
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OracleParameter OraclePar2 
= new OracleParameter("p_dw", OracleType.VarChar);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OraclePar2.Direction 
= ParameterDirection.Input;
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OraclePar2.Value 
= organiseName;
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OracleParameter OraclePar3 
= new OracleParameter("C", OracleType.Cursor);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                OraclePar3.Direction 
= ParameterDirection.Output;
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCmmd.Parameters.Add(OraclePar1);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCmmd.Parameters.Add(OraclePar2);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCmmd.Parameters.Add(OraclePar3);
[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleAdp 
= new OracleDataAdapter(m_OracleCmmd);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                DataSet DS 
= new DataSet();
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleAdp.Fill(DS);
[原]flash研究(二)——与asp.net服务交互(访问数据库)                m_OracleCnn.Close();
[原]flash研究(二)——与asp.net服务交互(访问数据库)
[原]flash研究(二)——与asp.net服务交互(访问数据库)                
string xmlString = DS.GetXml();
[原]flash研究(二)——与asp.net服务交互(访问数据库)                Response.Write(xmlString);
[原]flash研究(二)——与asp.net服务交互(访问数据库)            }

[原]flash研究(二)——与asp.net服务交互(访问数据库)            
catch (Exception e1)
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)            
[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)                Response.Write(e1.Message);
[原]flash研究(二)——与asp.net服务交互(访问数据库)            }

[原]flash研究(二)——与asp.net服务交互(访问数据库)        }

[原]flash研究(二)——与asp.net服务交互(访问数据库)    }


代码比较简单,就不做解释了。

三、XML

XML类的sendsenAndLoad方法和LoadVars类的这两个方法类似。

1public send(url:String, [target:String], [method:String]) : Boolean将指点的XML发送到URL地址。

url:指定 XML 对象的目标 URL。

target: [可选]显示服务器返回的数据的浏览器窗口:

_self 指定当前窗口中的当前帧。

_blank 指定一个新窗口。

_parent 指定当前帧的父级。

_top 指定当前窗口中的顶级帧。

如果不指定 target 参数,则与指定 _self 的效果相同。

method: [可选] HTTP 协议所使用的方法:"GET" 或 "POST"。在浏览器中,默认值为 "POST"。在 Flash 测试环境中,默认值为 "GET"。

var my_xml:XML = new XML("<Root><name>flashPar1</name><date>flashPar2</date></Root>");
my_xml.contentType = "text/xml";
my_xml.send("http://10.72.25.203/flashy/FlashService.aspx ", "_blank");
2、public sendAndLoad(url:String, resultXML:XML) : Void

url:指定的 XML对象的目标 URL。

resultXML:目标 XML对象,它将接收来自服务器的返回信息。

   :用XML类的sendAndLoad实现一个用户登录,flash界面上放两个输入文本用于输入用户名和密码,一个输出文本显示登录验证信息,一个按钮发送数据,

Flash端代码如下:

 

[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)send_btn.onRelease = function() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
if (login_name == null || login_password == null[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        reply_txt 
= "输入的用户名和密码必须正确!";
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    }
 else [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//第一步 构建一个XML文档,该文档仅有一个节点LOGIN,
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//但是该节点有两个属性:uesrname和password。
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//例如:<LOGIN uesrname = "Tom" password = "111111" />
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        var loginXML:XML = new XML();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginXML.ignoreWhite 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginElement 
= loginXML.createElement("LOGIN");
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginElement.attributes.username 
= login_name;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginElement.attributes.password 
= login_password;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginXML.appendChild(loginElement);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//第二步 构建一个XML对象,该对象用来控制服务器返回的信息
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        var loginReplyXML:XML = new XML();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        loginReplyXML.onLoad 
= onLoginReply;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//第三步 使用sendAndLoad()方法将登录信息发送给服务器,
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
//并将返回的信息赋给XML对象loginReplyXML
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        loginXML.sendAndLoad("http://127.0.0.1/loginXML.aspx", loginReplyXML);
[原]flash研究(二)——与asp.net服务交互(访问数据库)        reply_txt 
= "验证中[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)}
;
[原]flash研究(二)——与asp.net服务交互(访问数据库)
//函数onLoginReply()用来处理服务器返回的信息
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
function onLoginReply() [原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)    var resultXML:XML 
= new XML();
[原]flash研究(二)——与asp.net服务交互(访问数据库)    resultXML.ignoreWhite 
= true;
[原]flash研究(二)——与asp.net服务交互(访问数据库)    resultXML.parseXML(
this);
[原]flash研究(二)——与asp.net服务交互(访问数据库)    var e:XMLNode 
= resultXML.firstChild;
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)    
if (e.nodeName == "LOGINREPLY" && e.attributes.STATUS == "OK"[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        reply_txt 
= "验证通过";
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
// 在这里可以编写其它的脚本用于验证通过后要响应的程序
[原]flash研究(二)——与asp.net服务交互(访问数据库)[原]flash研究(二)——与asp.net服务交互(访问数据库)
    }
 else if (e.nodeName == "LOGINREPLY" && e.attributes.STATUS == "FAILED"[原]flash研究(二)——与asp.net服务交互(访问数据库){
[原]flash研究(二)——与asp.net服务交互(访问数据库)        reply_txt 
= "    用户名和密码不正确!";
[原]flash研究(二)——与asp.net服务交互(访问数据库)    }

[原]flash研究(二)——与asp.net服务交互(访问数据库)}

服务端接收XML发送的数据的方法和前面的方法都不同,要从Http包头中取发送过来的数据,服务端接收数据的代码如下

[原]flash研究(二)——与asp.net服务交互(访问数据库)Stream xmlStream = Request.InputStream;//接收发送过来的XML数据,位于HTTP报头中
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        DataSet DS = new DataSet();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        DS.ReadXml(xmlStream);
//将它读进一个DataSet
[原]flash研究(二)——与asp.net服务交互(访问数据库)
        XmlDocument xmlDoc = new XmlDocument();
[原]flash研究(二)——与asp.net服务交互(访问数据库)        xmlDoc.LoadXml(DS.GetXml());
[原]flash研究(二)——与asp.net服务交互(访问数据库)        xmlElement root 
= xmlDoc.DocumentElement;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
string password = root.Attributes.GetNamedItem("password").value;
[原]flash研究(二)——与asp.net服务交互(访问数据库)        
string username = root.Attributes.GetNamedItem("username").value;
接收到数据以后就是ado.net的工作了,就不赘述了,取完数据返回给falsh的方法和LoadVars例子中返回的方法相同。
 

访问数据库的就写到这,以后有空了再整理flash与JavaScript交互的方法。

转载于:https://www.cnblogs.com/salonliudong/archive/2007/12/20/1007961.html