Silverlight 3 调用WCF/webService 获得“DataSet”

  之前写过一篇文章,为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中呼叫:

Silverlight 3 调用WCF/webService 获得“DataSet”_第1张图片

注意e.Result的类型,XElement类型,我们只要确认这个XElement的结构并正确Parse即可。

经过分析可知,每个Sql语句的执行结果,被解析为两个Nodes.

我们现看看每个Node的内容:
Node0: sql语句中的数据结构

Silverlight 3 调用WCF/webService 获得“DataSet”_第2张图片

Node1:sql的执行结果,以xml格式返回
Silverlight 3 调用WCF/webService 获得“DataSet”_第3张图片

可以看到此结果就是一个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如果自定义还不得而知。给我们在解析时徒增困惑。

 

你可能感兴趣的:(silverlight)