分享
 
 
 

解析.NET框架下的数据类型转化技术

王朝c#·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

[前言]xml技术是微软.NET战略的一个重要基础,其在.NET开发中的作用自然是不言而喻的。随着XML Web服务的日益发展以及各种异构平台下数据交换的需求日益增加,XML逐渐在成为数据存储的一种重要方式。然而目前更多的数据是以关系型数据的方式存在的,这样将关系型数据转化为XML数据并进而呈现给最终用户成了开发人员的一项主要工作。.NET不仅以XML为基础,而且对XML标准有十分完美的支持。在.NET开发环境下,开发人员只要以很小的代价就可以达到数据类型转化并将数据以特定格式呈现给最终用户的目的。

基本原理:

.NET框架中包含了一个专门用于处理XML的命名空间-System.Xml,其中包含了相当多的与XML相关的类。其子命名空间包括:System.Xml.Serialization,System.Xml.Schema,System.Xml.XPath,System.Xml.Xsl,这些子命名空间包含了与XML相关的更具体的类。其中的System.Xml和System.Xml.Xsl正是开发人员完成数据类型转化并以特定格式将数据呈现给最终用户所必须的命名空间,前者包括的XmlDataDocument类能从ADO.NET中的DataSet对象获取关系型数据并以XML的格式存储之,同时它是XmlDocument类的一个子类,所以是基于文档对象模型(DOM)的。而后者所包括的XslTransform类是完成XSLT转换的重要类,该类可以根据一个XmlDataDocument对象以及一个相应的XSLT文件完成XML数据格式的转换,也即它能将XML数据以Html的方式显示出来,这样就达到了以特定格式将XML数据呈现给最终用户的目的了。

关系型数据转化为XML数据的过程中,我们运用了一个XmlDataDocument对象从DataSet对象中获取数据,其实这个过程是将XmlDataDocument对象和DataSet对象同步化的过程。一旦这两个对象被同步化了,那么对于任何一个对象的数据操作都会在另一个对象中反映出来。这样开发人员就可以同时运用XSLT技术以及ADO.NET相关的技术访问并操作数据了。同步化这两个对象的方法一般包括以下三种:

1. 首先将一个XML文档导入到一个XmlDataDocument对象中,然后访问其DataSet属性。值得注重的是,在运用XmlDataDocument对象访问数据前必须设置好DataSet属性的模式,同时将数据表和列分别匹配到XML中相应的元素上。还有,模式是大小写敏感的。

2. 先创建一个带有模式的DataSet对象,然后将一个XML文档直接导入到一个XmlDataDocument对象中并使之与前面的DataSet对象同步化。这种方式适合于XML文档非常大的情况,但是只要你把它和DataSet对象中的关系视图同步化,其中的元素也就和DataSet对象中的模式相对应起来了。

3. 最简单的方法!根据一个已有的DataSet对象创建一个全新的XmlDataDocument对象。基本代码如下:

DataSet ds = new DataSet();

// 在此包含填充DataSet对象的代码

XmlDataDocument xmldd = new XmlDataDocument(ds);

更多的请看:http://www.QQread.com/windows/2003/index.html实例介绍

下面我向大家介绍一个示例性的asp.net Web应用程序,该程序能从SQL Server 2000中的Northwind数据库中获取关系型数据并填充到一个DataSet对象中。该Web应用程序使用上面介绍的第三种方法同步化DataSet对象和XmlDataDocument对象,以完成从关系型数据到XML数据的转化工作。最后该Web应用程序根据一个预先编写好的XSLT文件实现从XML格式到HTML格式的数据转换,其中运用到的主要类便是XslTransform类。所以总体来看该Web应用程序并不复杂,不过它良好地体现了.NET框架下不同数据类型的转化方法和技巧,值得大家学习。

首先打开Visual Studio.Net,创建一个Visual C#的ASP.NET Web应用程序,如图1所示:

图1

接着从SQL Server 2000的Northwind数据库中获取数据并填充到一个DataSet对象中。Northwind数据库中包含了一个Suppliers表和一个PRodUCts表,它们之间存在着一对多的关系,该关系以两个表中的SupplierID列为关联键。该关系能显示每个供给商所能供给的所有产品列表,假设该Web应用程序就是要显示这些信息,那么下面就是获取DataSet对象的方法了。

private DataSet GetDataSet()

{

try

{

// 创建SqlConnection对象、两个SqlDataAdapter对象以及一个DataSet对象

SqlConnection con = new SqlConnection("server=localhost;initial catalog=Northwind;integrated security=true;");

SqlDataAdapter daSuppliers = new SqlDataAdapter("SELECT * FROM Suppliers", con);

SqlDataAdapter daProducts = new SqlDataAdapter("SELECT * FROM Products", con);

DataSet ds = new DataSet("SuppliersProductsDS");

// 打开连接,并用上面的两个SqlDataAdapter对象填充DataSet对象,最后关闭连接

con.Open();

daSuppliers.Fill(ds, "Suppliers");

daProducts.Fill(ds, "Products");

con.Close();

// 在DataSet对象中添加必要的关系,该关系是一对多类型的

ds.Relations.Add("SuppliersProducts", ds.Tables["Suppliers"].Columns["SupplierID"], ds.Tables["Products"].Columns["SupplierID"]).Nested = true;

// 返回DataSet对象

return ds;

}

catch (Exception)

{

return null;

}

}

上面的代码能将Northwind数据库中的Suppliers表和Products表的数据运用SqlDataAdapter对象的Fill()方法填充到一个DataSet对象中,然后在这两个数据表之间根据每个表中的SupplierID列建立一个一对多关系。

现在,你已经从后台数据库中获取数据并填充到DataSet对象了,不过要根据DataSet对象格式化输出结果是比较困难的,除非你使用像DataGrid那样的数据绑定控件。然而使用该类控件将使得输出结果的显示方式不富于变化,那也就可能不能满足应用程序的需求了。于是,你得先将数据格式转化为XML格式并运用XSLT技术将数据以HTML的方式显示给最终用户。所以,下面先得创建一个XSLT样式表文件。为该项目添加一个新项,如图2所示:

图2

样式表文件自身就是一个XML文件,其中包含了一个或多个XSLT模板。这些模板能根据其中的指令对源XML文件中的元素进行逐个处理并生成相应结果。编辑该样式表文件如下:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="SuppliersProductsDS">

<HTML>

<HEAD>

<TITLE>XmlDataDocument Transformation!</TITLE>

</HEAD>

<STYLE>

BODY{ font-family:verdana;font-size:9pt }

TD { font-size:8pt }

</STYLE>

<BODY>

<xsl:apply-templates select="Suppliers"></xsl:apply-templates>

</BODY>

</HTML>

</xsl:template>

<xsl:template match="Suppliers">

<TABLE>

<TR><TD>

<B>

<xsl:value-of select="CompanyName"></xsl:value-of>

<xsl:value-of select="Phone"></xsl:value-of>

</B>

</TD></TR>

</TABLE>

<xsl:apply-templates select="Products"></xsl:apply-templates>

</BR>

</xsl:template>

<xsl:template match="Products">

<TABLE BORDER="1">

<TR>

<TD valign="top" bgcolor="#E0E0E0">

<B>Product:</B>

</TD>

<TD valign="top">

<xsl:value-of select="ProductName"></xsl:value-of>

</TD>

</TR>

<TR>

<TD valign="top" bgcolor="#E0E0E0">

<B>QuantityPerUnit:</B>

</TD>

<TD valign="top">

<xsl:value-of select="QuantityPerUnit"></xsl:value-of>

</TD>

</TR>

<TR>

<TD valign="top" bgcolor="#E0E0E0">

<B>UnitPrice:</B>

</TD>

<TD valign="top">

<xsl:value-of select="UnitPrice"></xsl:value-of>

</TD>

</TR>

</TABLE>

</xsl:template>

</xsl:stylesheet>

最后便是根据上面创建并填充的DataSet对象创建一个新的XmlDataDocument对象,然后根据样式表文件将XML数据转换为HTML格式的数据并呈现给最终用户。XSLT转换过程涉及到三个文件:一个为源XML文件,它是被处理的对象;一个样式表文件,它是XSLT转换的工具;还有一个就是输出结果文件。XSLT转换过程运用到了XslTransform类的Load()方法和Transform()方法,其作用分别是导入样式表和进行实际的转换。下面,添加Web页面的Load事件响应函数如下:

private void Page_Load(object sender, System.EventArgs e)

{

try

{

// 根据一个已有的DataSet对象创建一个新的XmlDataDocument对象

DataSet ds = this.GetDataSet();

XmlDataDocument xdd = new XmlDataDocument(ds);

// 创建一个XslTranform对象并导入XSLT样式表文件

XslTransform xslt = new XslTransform();

xslt.Load(Server.MapPath("SuppliersProducts.xslt"));

// 进行XSLT转换并输出结果到一个流对象

MemoryStream ms = new MemoryStream();

xslt.Transform(xdd, null, ms);

ms.Seek(0, SeekOrigin.Begin);

StreamReader sr = new StreamReader(ms);

// 显示输出结果

Response.Write(sr.ReadToEnd());

}

catch (Exception) {}

}

运行该Web应用程序的结果如图3所示:

图3

总结

以上我向大家阐述了.NET框架下数据类型转化的基本方法和技巧,其中的Web应用程序从后台数据库中获取了关系型的数据并根据DataSet对象和XmlDataDocument对象的同步化原理将数据转化为了XML类型的数据,最后它还运用到了XSLT技术将XML数据以HTML的格式呈现给最终用户,所以该实例良好地体现了.NET框架下与数据转化相关的技术,不失为一个好例子。最后,希望本文能对大家有不少帮助!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有