您的位置:首页 > 职场人生

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

2011-09-14 09:10 447 查看
在使用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作为返回值

  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());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息