从SQL数据库中检索表

时间:2010-04-18 11:03:13

标签: .net sql web-services flex4

正如标题所说,我想使用Flex 4和.Net WebService从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>

检索DataTable:(这不起作用)

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>

2 个答案:

答案 0 :(得分:0)

我也是Flex的新手,我遇到了和你一样的问题。我对你做的唯一不同的事情就是在我的webservice中填充数据集而不是数据表。使用FlashBuilder 4网络监视器我可以看到我的数据实际上已经到达Flex应用程序,因此Web服务工作正常但我的问题是我无法填写下拉列表。 作为参考,我还从Webservice向我的Flex应用程序发送了一个字符串,就像你的“检查”一样,它也有效。但是我确实看到网络监视器中的2个结果之间存在差异,在看到数据集中的数据之前必须深入钻取。 麻烦的是,我太新了,如果这意味着我已经为我的下拉列表字段提供了一个更长的名称来获取数据,但这将是我明天的任务。 也许这是你尝试的想法。

答案 1 :(得分: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/