2010-04-18 137 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/