原作:lwanchen
现在,我们来学习一下remoting怎么通过.net环境来调用数据库内容,在这里我假设你已经读过我写的关于配置和.net下的hello
world程序,并 已经理解了,remoting的概念,如果你还没懂,那么我建议你先去看看我的那两篇文章,另外下面我所讲的和ado.net的简单知识有关,所以请对ado.net没有什么了解的朋友,先去看一下有关ado.net的资料,掌握之后再重新回头来看我下面的文章,由于,前几篇文章,我已经对remoting配置,和基本程序写法做了细致的描述,所以下面我所讲的对于涉及到以前的内容,我基本上会一笔代过,所以请一定要先详细的看我的前几篇文章,然后再回头来看这篇文章,否则对于初学者可能看完了仍然一头雾水,好了,废话我说完了,下面开始进入主题。
1.首先请做一些学习前的准备工作,首先请先建立一个数据库(我建立的是access数据库,因为他不需要太多的配置,讲解起来还容易,嘿嘿!!!),好了,如果你的.net环境已经配置好了,那么我们现在开始吧。
2.首先在虚拟目录下建立一个名字为adoTest的文件夹,把flashremoting文件夹下的bin文件夹,和gateway.aspx,web.config全部拷贝到adoTest文件夹下,在adoTest文件夹下新建一个database的文件夹,然后把你建立好的access数据库放到这个文件夹里,然后在计算机管理里面讲这个文件夹设置为应用程序(具体设置方法,请参看我前面的文章),好了,基本工作做完了。
3.下面在adoTest文件夹下新建一个asp.net页面,取名为usingAdo.aspx,然后我们来看看usingAdo.aspx的代码。
4.首先当然还是注册和导入所需要的类,代码如下:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Page language="vb" debug="true" %>
<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway"
%>
<Macromedia:Flash ID="Flash" runat="server"/>
请注意这段代码:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
这是.net调用非sql数据库所必须的,所以不可以省略。
之后是我们用.asp.net来调用数据库的代码,代码如下:
dim conn as oledbconnection
dim adpt as oledbdataadapter
dim ds as dataset
dim provider="provider=Microsoft.Jet.OLEDB.4.0"
dim database="data source=" & server.mappath("database/student.mdb")
Conn = New OleDbConnection( Provider & ";" & DataBase )
conn.open()
dim sql
sql="select * from cs"
adpt=new oledbdataadapter(sql,conn)
ds=new dataset()
adpt.fill(ds,"cs")
在这里我调用的是asp.net当前文件夹的上一级的database文件夹下的student.mdb数据库(什么你的数据库没有放在这,那让程序去找到你的数据库啊!!!),然后执行sql语句,把从数据库里返回的值放到dataset对象里(也就是ds对象)。
下面的比较重要,代码如下:
flash.datasource=ds.tables("cs")
flash.databind()
看到了没有,remoting的功能就是这么强大,直接绑定到我们之前定义的flash对象里就可以了,呵呵,书写的方法,和ado.net里的databind很像哦!!!
好了基本的代码就是这样,下面看一下全部代码,代码如下:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Page language="vb" debug="true" %>
<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway"
%>
<Macromedia:Flash ID="Flash" runat="server"/>
<script runat="server">
sub page_load(sender as object,e as eventargs)
dim conn as oledbconnection
dim adpt as oledbdataadapter
dim ds as dataset
dim provider="provider=Microsoft.Jet.OLEDB.4.0"
dim database="data source=" & server.mappath("database/student.mdb")
Conn = New OleDbConnection( Provider & ";" & DataBase )
conn.open()
dim sql
sql="select xuehao,name,xi,ji,ban from cs"
adpt=new oledbdataadapter(sql,conn)
ds=new dataset()
adpt.fill(ds,"cs")
flash.datasource=ds.tables("cs")
flash.databind()
conn.close()
end sub
</script>
其实这里比较关键的就是
flash.datasource=ds.tables("cs")
flash.databind()
这两句,因为其他的代码都是关于.net调用数据库的部分,相信对.net有了解的朋友都会,我在这里也就不多废话了
5.下面来看一下flash端的代码。
6.首先在舞台上拖一个datagrid组件取名为custCountry_grd,然后把RemotingClasses类拖到舞台上然后在第一真加命令,首先是导入我们需要的类,代码如下:
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
7.然后建立service对象,建立连接,代码如下:
var custCountryASPX:Service = new Service("http://localhost/adoTest/gateway.aspx",
null, "adoTest", null, null);
(具体的是怎么找到我们的usingAdo.aspx,我不在讲解了,如果你还是不明白,那么请看我的前几篇文章)
8.下面需要建立pendingcall对象去调用usingAdo方法,代码如下:
var pc:PendingCall = custCountryASPX.usingAdo();
9.接下来是设定传回值的方法,代码如下:
pc.responder = new RelayResponder(this, "gotCountries", "gotFault");
10.下面是方法的实现,代码如下:
function gotCountries(re:ResultEvent):Void {
custCountry_grd.dataProvider = re.result;
// got a RecordSet back in result
}
function gotFault(fe:FaultEvent):Void {
trace("error-"+fe.fault.faultstring);
}
好了,工作完成了,完成的代码如下:
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
var custCountryASPX:Service = new Service("http://localhost/adoTest/gateway.aspx",
null, "adoTest", null, null);
var pc:PendingCall = custCountryASPX.usingAdo();
pc.responder = new RelayResponder(this, "gotCountries", "gotFault");
function gotCountries(re:ResultEvent):Void {
custCountry_grd.dataProvider = re.result;
// got a RecordSet back in result
}
function gotFault(fe:FaultEvent):Void {
trace("error-"+fe.fault.faultstring);
}
还等什么,马上去测试吧,如果配置方面没什么问题,你会看到你数据库里的数据已经显示在datagrid组件里了。
当然这是一个比较简单的例子,并没有对传回的值进行在加工,你大可以把传回的值放到flash的dataset里,然后进行再加工,这要靠你个人的功力了,我只是像你提供了调用数据库的方法。
下一节,我将向大家介绍java环境下调用数据库的方法,敬请期待…………
下面是废话,如果有问题,或者想讨论关于remoting的知识请与我联系,我的qq:22339146,我的msn:lwanchen@hotmail.com。