Flex RIA的ArcIMS WebGIS之路(三)--通过Asp.net数据库的访问,不是WebService哦!

本文探讨了使用Flex访问Oracle数据库的方法,对比WebService与Asp.net的效率,并详细介绍了通过Asp.net页面实现数据访问的具体步骤。

做ArcIMS不能离开SDE,用上SDE不能不访问数据库。Flex访问数据还算方便,访问数据库那个麻烦啊emsad.gif!总的来说.Net平台解决方案有WebService与Remoting,对于在内网或者VPN的情况下Remoting效率还算可以,不过做起来罗嗦还有发布问题。一般来说使用WebService的比较多,但是WebService的效率实在不敢恭维,今天Flex重点还是放在另外一条思路上--Asp.net,今天比较郁闷由于地图数据迁移到Oracle上搞了半天才有时间照顾Flex进展,原来的中文图层名与字段换成了英文,用IMS访问看来是拿不到中文了,还好在数据库中定义了中英文的图层名与字段对照表,可以通过Flex访问数据库来弥补,如果用WebService的话不可避免的长时间的buzyCursor,再看看访问IMS服务器的时候使用UrlRequest就能发送数据还能获取结果,效率似乎不错,于是就想起来自己写几个Asp.net页面,通过Asp.net访问数据库(好亲切的DAAB啊emsmilep.gif).
废话不多罗嗦了,首先写个asp.net网页,访问一个Oracle数据库。
在web.config中添上一段,用来给DAAB读取数据库配置
<connectionStrings>
  <add name="PC_Ora" connectionString="Data Source=gisdata;User Id=***;Password=***" providerName="System.Data.OracleClient"/>
 </connectionStrings>
新建一个页面,在PageLoad里面写上
Database db = DatabaseFactory.CreateDatabase( "PC_Ora" );
        StreamReader sr = new StreamReader( this.Request.InputStream );
        string tbName = sr.ReadToEnd();
        string sqlGetLayerInfo = "select TABCAP from sys_tabname t where UPPER(t.tabname) like '" + tbName.ToUpper() + "'";
        IDataReader dr = db.ExecuteReader( CommandType.Text, sqlGetLayerInfo );
        this.Response.ContentType = "text/xml";
        while ( dr.Read() )
        {
            Response.Write( dr[0].ToString() );
        }
这样查询的数据就能够写到页面里面了
怎么拿到呢?
万能的URLRequest登场了
不多说在通过ArcIMS获取图层名称时候
public function set Name(na:String):void
  {
   this.name = na;
   var capReq:URLRequest = new URLRequest();
   capReq.url = "http://10.25.2.45/webwork/FlexDataService/GetData.aspx"; 
   capReq.method ="POST";
   capReq.data = na;
   var urlLoader:URLLoader = new URLLoader();
   urlLoader.addEventListener(Event.COMPLETE, layerCompleteHandler);
   try {
                urlLoader.load(capReq);
            } catch (error:Error) {
                mx.controls.Alert.show("发送请求错误","ASP.Net请求",4,null);
            }
  }
以上的IP是内网地址,不要访问
C#代码中的
 StreamReader sr = new StreamReader( this.Request.InputStream );
        string tbName = sr.ReadToEnd();
得到的结果自然就是ActionScript代码中na的值了
下面就不用多说了吧,像访问IMS那样拿出dada,解析就能获得数据了
private function layerCompleteHandler(event:Event):void
  {
            var loader:URLLoader = URLLoader(event.target);
            var st:String = loader.data;
            this.caption = st.substr(0, st.indexOf("\r"));
            var fldReq:URLRequest = new URLRequest();
}注意要"\r",如果完全取出data,就包含了html代码了。
总的说来这种方式比WebService方式要快不少,但是对于批量数据怎么办?比如属性表什么的,看来还是得WebService或者能利用Asp.net通过DataSet的XML来走,还没有尝试。终于界面上看不到E文了。
突然发现,我的图层树只能显示图层名称,这个可不行,怎么说图层控制和菜单还是要的,如何实现TOC呢,请看下一期的Flex RIA的ArcIMS WebGIS之路--Flex自定控件实现图层TOC

ps:这一期其实早就写了一部分,由于比较忙落下了。一次偶然搜索资料的时候,看到有位校友,可能是师弟吧转载了前两期。吼吼,欢迎大家评论!

转载于:https://www.cnblogs.com/Brune/archive/2007/01/12/592690.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值