UML软件工程组织

DataSet & XML初探
作者:CNet(jiabaoxu@hotmail.com)

在探讨DataSet和XML之前,我们首先对ADO.NET进行初步的了解。可以说ADO.NET是各种各样数据访问技术中最新的一种,它已经成为构建.Net数据库应用程序的基础,尽管如此,ADO.NET并不是完全以数据库为核心的,它集成 XML 支持,提供了平台互用性和可伸缩的数据访问(这也是ADO.NET和ADO的最大区别)。
在ADO.NET组件中DataSet是其核心组件之一,它提供了独立于数据源的数据访问,为了实现这种平台互用性和可伸缩的数据访问,ADO.NET采用了基于XML数据的传输格式,XML在这里充当了至关重要的脚色。当数据传输时,ADO.NET是将DataSet表述为XML,然后以XML格式传递给其他组件。DataSet 的这种设计使我们能够使用 XML 方便地通过 Web 将数据传输,当然接收数据的组件不一定就是ADO.NET组件,它可以是任何可以处理XML数据的组件,从这里我们可以明显的看出ADO.NET比ADO的强大之处。
图1阐述了.NET数据提供程序、DataSet、XML之间的关系:



图1

由DataSet数据转换为XML数据

为了比较形象的说明DataSet和XML之间的关系,我们利用VS.NET环境开发两个例子来详细的说明。
 下面我们来看第一个例子,如何使用ADO.NET把DataSet数据写入到XML文件中。我们使用Sql Server2000系统自带的Pubs库,生成关于作者(Authors)信息的XML文件。首先新建一个名为DataToXml的Windows应用程序,打开VS.NET,执行如下步骤:文件——>新建——>项目,弹出如图2的窗口,输入项目名称:DataToXml,以及保存项目的位置,点击“确定”,完成项目的创建工作,此时VS.NET默认会创建一个名为Form1的Windows Form(图3)。


图2


图3

下一步,创建我们要操作DataSet数据集的窗体,新建名为DataToXmlSample的Windows Form。执行如下步骤:在项目资源管理器右击DataToXml——>添加——添加Windows窗体(图4),弹出创建“添加新项”窗口,输入DataToXmlSample(图5)。当然,也可以把VS.NET在创建Windows项目时VS.NET创建的Form1改名为我们需要文件名。



图4


图5

 在DataToXmlSample窗体上添加我们需要的控件,在这个例子中,我们需要一个名为lbxXmlData的ListBox,用来浏览从数据库中取出的信息,两个Button按钮,一个是btnViewXml,一个是btnBuildFile,如图6一样简单的在窗体上布置这三个控件。窗体的设置工作完成后,下一步进行我们最关键的编码工作。


图6
 要运行这个样例,需要导入Data、Xml、Data SqlClient 、IO名称空间。我们先从创建DataSet开始我们的编码,创建CreateDataSet()方法返回类型为DataSet,这样就可以在别的方法中直接调用该方法,取得DataSet。

public DataSet CreateDateSet()

{

// 创建到Sql Server数据库的连接

stringstrconn="DataSource=localhost;Database=Pubs;uid=sa;pwd=";

SqlConnection conn = new SqlConnection ();

conn.ConnectionString = strconn;

conn.Open();

// 创建关于Authors表的数据集

string strAuthorsSql = "SELECT * FROM authors";

SqlDataAdapter da = new SqlDataAdapter(strAuthorsSql,conn);

da.SelectCommand.CommandType = CommandType.Text;

// 声明DataSet

DataSet ds = new DataSet();

da.Fill (ds,"XMLAuthors");

// 返回DataSet数据集

return ds;

}

 

下一步编写代码生成Xml数据流,编写BuildXml()方法:

public XmlDocument BuildXml()

{

// 声明MemoryStream对象

XmlDocument doc=new XmlDocument();

MemoryStream mStrm = new MemoryStream ();

StreamReader sRead = new StreamReader(mStrm);

// 调用CreateDataSet方法把DataSet中的数据输出

CreateDateSet().WriteXml (mStrm,XmlWriteMode.IgnoreSchema);

// 从数据流的开始位置进行搜索

mStrm.Seek (0,SeekOrigin.Begin);

// 将数据流加载到XmlDocument

doc.Load (sRead);

return doc;

}

创建写入XML文件的方法BuildFile():

private void BuildFile()

{

// 要写入文件的路径

string filepath = "F:\\Authors.xml";

CreateDateSet().WriteXml(filepath);

}

 

创建写入XML文件的方法BuildFile():

private void BuildFile()

{

// 要写入文件的路径

string filepath = "F:\\Authors.xml";

CreateDateSet().WriteXml(filepath);

}

 

好了,现在基础工作我们都完成了,下一步需要我们把这些方法组合起来,完成我们的目的。回到设计窗口,双击“View Xml”按钮,切换到代码编辑窗口,可以看到系统自动增加了一个btnViewXml_Click()方法。在该方法中,我们添加如下代码把XML数据流填充到ListBox控件中。

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

{

// 清除ListBox的所有项

lbxXmlData.Items.Clear();

XmlNodeList ndList = BuildXml().GetElementsByTagName("XMLAuthors");

foreach(XmlNode xn in ndList)

lbxXmlData.Items.Add (xn.InnerText);

}

 

再次回到设计窗口,双击“Build File”按钮,切换到代码编辑窗口,在系统自动添加的btnBuildFile_Click()方法中添加如下代码调用上面的BuildFile()方法以生成Authors.xml文件。

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

{

BuildFile();

}

 

为了让我们的Windows应用程序能够运行,还需要给程序提供一个入口点:

[STAThread]

static void Main()

{

Application.Run(new DataToXmlSample());

}

 

好了,到此为止我们这个程序所有的Coding工作都已完成,让我们来品尝我们的劳动果实吧!双击VS.NET工具栏的"启动"按钮,启动应用程序显示如图7窗口,单击"View Xml"按钮调用btnViewXml_Click()方法,ListBox将被纪录填充(图8)。单击"Build File"按钮,调用btnBuildFile_Click()方法,在F盘根目录下生成Authors.xml(如图9)。




图7

图8



图9

到此为止,我们的第一个例子:从DataSet到XML的转换已经圆满的完成了。下一个例子,要把刚才生成的Authors.xml文件的数据再填充到DataSet中,完成一次数据的轮回。

由XML数据转换为DataSet数据
按照刚才创建DataToXml项目的方式创建XmlToData项目,并在在该项目中添加一个Form窗体,命名为XmlToDataSetSample。在窗体上添加一个名为dgViewXml的DataGrad控件,一个名为btmLoadXml的Button控件。单击"Load Xml"按钮切换到代码编辑窗口,输入如下代码:

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

{

DataSet ds = new DataSet();

string filepath = "F:\\Authors.xml";

ds.ReadXml (filepath);

dgViewXml.DataSource = ds;

dgViewXml.DataMember = "XMLAuthors";

}

 

添加程序入口点:

[STAThread]

static void Main()

{

Application.Run(new XmlToDataSetSample());

}

 

单击工具栏上的"启动"按钮,启动应用程序(如图10),单击"Load Xml"按钮,程序调用btnLoadXml_Click()方法,把Authors.xml中的数据填充到DataSet中并显示在DataGrid控件中(图11)。




图10


图11

结束语

.NET Framework提供了操作XML的强大支持,在.NET Framework中,DataSet和XML文档是相同数据的不同视图。  ADO.NET对XML的支持为应用程序间的数据共享提供了易于开发的解决方案,改变了典型分布式系统的面貌。

 

 

版权所有:UML软件工程组织