为Silverlight 项目创建通用WebService数据访问

为Silverlight 项目创建通用WebService数据访问,第1张

概述   在使用Silverlight之前,我们创建了自己的webService做为通用数据访问。开发者传递一个Sql语句,即可得到一个DataSet,DataTable作为返回值。在Silverlight项目中,由于其对DataTable的限制,我们不得不首先得到DataTable,而后在本地再创建Web service(WCF),对得到的DataTable进行转换。转换为数组或者泛型集合以适应Si

   在使用Silverlight之前,我们创建了自己的webService做为通用数据访问。开发者传递一个SQL语句,即可得到一个DataSet,Datatable作为返回值。在Silverlight项目中,由于其对Datatable的限制,我们不得不首先得到Datatable,而后在本地再创建Web service(WCF),对得到的Datatable进行转换。转换为数组或者泛型集合以适应Silverlight的需要。
     但是这样做难免有些繁琐,且开发者做出了很多费力的工作。
     这里,我们对原来的Webservice做出了一些改动:但凡返回值为DataSet的webMethod都为其加上一层“外衣”,将其转化为XElement后返回给调用者一个XML档案。开发者只需利用liNQ TO Xml通过简单的xml *** 作就可得到需要的集合。这样就免除了每个专案建立“自己”的service的工作。
     下面通过一个简单的Demo对这个 *** 作做出说明:

     根据得到的Datatable,为其创建XElement作为返回值
  

Code
  static voID Main(string[] args)
        {
            
//获取数据源Datatable
            Datatable dt = clIEnt.Executequery(sql).tables[0];

            
//创建XML document
            Xdocument doc= new Xdocument(
               
new XElement("tables",
                   
new XAttribute("xmlns"""),
                   
new XElement("table",
                       
new XAttribute("name""0"),
                       
new XElement("columns"),
                       
new XElement("rows")))
                       );

            XElement columns 
= doc.Element("tables").Element("table").Element("columns");

            
foreach (DataColumn col in dt.Columns)
            {
                
//新增一个Element Column
                columns.Add(new XElement("column",
                   
new XAttribute("name", col.Columnname),
                   
new XAttribute("type", col.DataType.name)
                   ));
            }

            XElement rows 
= doc.Element("tables").Element("table").Element("rows");

            
foreach (DaTarow row in dt.Rows)
            {
                
//新增一个element Row
                XElement newrow = new XElement("row");
                rows.Add(newrow);

                
string data = null;
                
foreach (DataColumn col in dt.Columns)
                {
                    
switch (col.DataType.name)
                    {
                        
case "DateTime":
                            data 
= (row[col] == dbnull.Value ? "" : Convert.ToDateTime(row[col]).ToString("yyyy/MM/dd HH:mm:ss"));
                            
break;
                        
default:
                            data 
= (row[col] == dbnull.Value ? "" : row[col].ToString());
                            
break;
                    }

                    
//为新增的row添加Attribute
                    newrow.Add(new XAttribute(col.Columnname, data)
                 );

                }
            }

            XElement element 
= doc.Element("tables");


            Console.Writeline(element.ToString());
        }

Result:



调用者解析xelement

Code
        public static List<BasicInfo> getBasicInfo(XElement element)
        {
            List
<BasicInfo> Lists = new List<BasicInfo>();

            
//element为获得的返回者
            var result = from item in element.Descendants("row")
                          select item;


            BasicInfo info 
= null;

            
foreach (XElement item in result)
            {
                info 
= new BasicInfo();

                info.ID 
= (int)item.Attribute("ID");
                info.name 
= (string)item.Attribute("name");
                info.ParentID 
= (int)item.Attribute("PARENTID");
                info.Grade 
= (int)item.Attribute("GRADE");
                info.IDX 
= (int)item.Attribute("IDX");

                Lists.Add(info);
            }

            
return Lists;
        }

注:这里的实体类是不能缺少的

Code
 public class BasicInfo
    {
        
public int ID { setget; }

        
public string name { setget; }

        
public int ParentID { setget; }

        
public int Grade { setget; }

        
public int IDX { setget; }
    }

这里liNQ To XML的应用使得 *** 作变得简单实用.

@H_403_829@ 总结

以上是内存溢出为你收集整理的为Silverlight 项目创建通用WebService数据访问全部内容,希望文章能够帮你解决为Silverlight 项目创建通用WebService数据访问所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存