Silverlight 3 調用WCF/webService 獲得“DataSet”

來源:互聯網
上載者:User

  之前寫過一篇文章,為Silverlight 項目建立通用WebService資料訪問 ,寫的是如果在Silverlight中如果要使用Web Service,可以在Web Service中把大家常用的DataTable轉化為XElement返回,從而實現所謂的通用的資料訪問Service.

  今天要說的是,如果我們在使用Silverlight3時使用WCF/web Service,可以定義DataSet作為傳回值,這樣在Silverlight Application 中調用此Service時,得到的傳回值就直接可以得到ArrayOfXElement(如果是DataTable則報錯)

  看下面Demo.(以WCF為例)

WCF定義:

代碼

  public DataSet ExecuteQuery(string SQL)
        {
            try
            {
                string[] temp = SQL.Split(";".ToCharArray());
                DataSet ds = new DataSet();
                for (int i = 0; i < temp.Length; i++)
                {
                    SqlDataAdapter da = new SqlDataAdapter(temp[i], con);
                    da.Fill(ds, i.ToString());
                }
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

Silverlight中呼叫:

注意e.Result的類型,XElement類型,我們只要確認這個XElement的結構並正確Parse即可。

經過分析可知,每個Sql語句的執行結果,被解析為兩個Nodes.

我們現看看每個Node的內容:
Node0: sql語句中的資料結構

Node1:sql的執行結果,以xml格式返回

可以看到此結果就是一個Xml,只是它有自己的格式定義,下面我們解析這個xml就可以得到我們的結果。

代碼

   var s = from item in result.Nodes[1].Descendants("_x0030_")
                            select new
                            {
                                guid = item.Element("guid").Value,
                                name = item.Element("name").Value,
                                address = item.Element("address").Value,
                                dept = item.Element("dept").Value,
                            };

                    foreach (var v in s)
                    {
                        MessageBox.Show(v.guid+"--"+v.name);
                    }

      注意,這裡的“_x0030”在Node0中有定義。當然如果有多個sql,在Node0中就會有多個name的定義:如_x0030_, _x0031_.但是這個Name如果自訂還不得而知。給我們在解析時徒增困惑。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.