Flex RIA的ArcIMS WebGIS之路(三)–通過Asp.net資料庫的訪問,不是WebService哦!

來源:互聯網
上載者:User

做ArcIMS不能離開SDE,用上SDE不能不訪問資料庫。Flex訪問資料還算方便,訪問資料庫那個麻煩啊!總的來說.Net平台解決方案有WebService與Remoting,對於在內網或者VPN的情況下Remoting效率還算可以,不過做起來羅嗦還有發布問題。一般來說使用WebService的比較多,但是WebService的效率實在不敢恭維,今天Flex重點還是放在另外一條思路上--Asp.net,今天比較鬱悶由於地圖資料移轉到Oracle上搞了半天才有時間照顧Flex進展,原來的中文圖層名與欄位換成了英文,用IMS訪問看來是拿不到中文了,還好在資料庫中定義了中英文的圖層名與欄位對照表,可以通過Flex訪問資料庫來彌補,如果用WebService的話不可避免的長時間的buzyCursor,再看看訪問IMS伺服器的時候使用UrlRequest就能發送資料還能擷取結果,效率似乎不錯,於是就想起來自己寫幾個Asp.net頁面,通過Asp.net訪問資料庫(好親切的DAAB啊).
廢話不多羅嗦了,首先寫個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:這一期其實早就寫了一部分,由於比較忙落下了。一次偶然搜尋資料的時候,看到有位校友,可能是師弟吧轉載了前兩期。吼吼,歡迎大家評論!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.