2010-04-18 138 views
0

正如標題所說,我想使用Flex 4和.Net WebService從SQL數據庫檢索數據表。從SQL數據庫檢索表

我是新來的Flex和DotNet。請告訴我一個正確的方法來做到這一點。

這是我迄今所做的:


檢索字符串數組:(這部作品)

的.Net:

[WebMethod] 
public String[] getTestArray() 
{ 
    String[] arStr = { "AAA", "BBB", "CCC", "DDD" }; 
    return arStr; 
} 

的Flex 4:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 

    <fx:Script> 
     <![CDATA[ 

      import mx.collections.ArrayCollection; 
      import mx.controls.Alert; 
      import mx.rpc.events.ResultEvent; 

      [Bindable] 
      private var ac:ArrayCollection = new ArrayCollection(); 

      protected function btn_clickHandler(event:MouseEvent):void 
      { 
       ws.getTestArray(); 
      }   

      protected function ws_resultHandler(event:ResultEvent):void 
      { 
       ac = event.result as ArrayCollection; 
       Alert.show(ac.toString());    
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <s:WebService id="ws" wsdl="http://localhost:50582/Service1.asmx?WSDL" result="ws_resultHandler(event)"/> 
    </fx:Declarations> 

    <s:Button x="10" y="30" label="Button" id="btn" click="btn_clickHandler(event)"/> 

</s:Application> 

檢索數據表:(這不起作用)

DOTNET的:

[WebMethod] 
public DataTable getUsers() 
{   
    DataTable dt = new DataTable("Users"); 
    SqlConnection conn = new SqlConnection("server = 192.168.1.50; database = MyDatabase; user id = sa; password = 1234; integrated security = false");   
    SqlDataAdapter da = new SqlDataAdapter("select vFName, vLName, vEmail from Users", conn); 
    da.Fill(dt); 
    return dt; 
} 

的Flex 4:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 

    <fx:Script> 
     <![CDATA[ 

      import mx.collections.ArrayCollection; 
      import mx.controls.Alert; 
      import mx.rpc.events.ResultEvent; 

      [Bindable] 
      private var ac:ArrayCollection = new ArrayCollection(); 

      protected function btn_clickHandler(event:MouseEvent):void 
      { 
       ws.getUsers(); 
      }   

      protected function ws_resultHandler(event:ResultEvent):void 
      { 
       ac = event.result as ArrayCollection; 
       Alert.show(ac.toString()); 
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <s:WebService id="ws" wsdl="http://localhost:50582/Service1.asmx?WSDL" result="ws_resultHandler(event)"/> 
    </fx:Declarations> 

    <s:Button x="10" y="30" label="Button" id="btn" click="btn_clickHandler(event)"/> 

</s:Application> 

回答

0

我也是新來的Flex和我具有和你一樣的問題。我對你做的唯一一件事是填充一個數據集,而不是數據表中的dataadapter在我的web服務中。使用FlashBuilder 4網絡監視器我可以看到,我的數據實際上已到達Flex應用程序,因此Web服務工作正常,但我的問題是我無法讓我的下拉列表填充。 作爲參考,我還從Webservice向我的Flex應用程序發送了一個字符串,它與您的「檢查」一樣也起作用。不過,我確實看到網絡監視器中的兩個結果之間存在差異,在我看到數據集中的數據之前,必須進行更深入的鑽取。 麻煩的是,如果這意味着我已經給我的dropdownlist字段提供了一個更長的名稱來獲取數據,但我明白這是我的任務,所以我太新了。 也許這是一個想法讓你嘗試。

0

我發現一些谷歌搜索後的答案,所以我張貼在這裏傳播愛。

首先創建一個變量來保存結果

[Bindable] 
private var DotNetData:ArrayCollection; 

然後在你的處理器

protected function ws_resultHandler(event:ResultEvent):void 
{ 
    DotNetData = event.result.Tables.ListData.Rows; 
    resultsDg.dataProvider = DotNetData; 
} 

在這個例子中 「resultsDg」 只是一個數據網格。 「ListData」是指從響應XML中的「msdata:MainDataTable」元素獲取的數據表名。

靈感來自這裏:http://ranjitfx.wordpress.com/net-flex/