通过前面学习SqlDataAdapter,我们差不多已经了解了DataSet,它就是一个位于内存中的数据库,其内有许多内存中的表(DataTable),并且它们里面的数据可以通过SqlDataAdapter和数据库进行"双向沟通"。在前面我们也有描述怎么样通过更新DataSet来更新数据库,可实际上通过更新DataSet里的DataTable来实现的,所以关于这种更新数据库及更新xml文件的描述会更多的出现在下面讲DataTable的文章里。现在我们来描述ADO.NET2.0为DataSet增加的另一项功能----操作XML:
将DataSet中某个表写到XML文件里:
SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=newsystem;Integrated Security=True"); SqlDataAdapter da = new SqlDataAdapter("select * from comment", conn); DataSet ds = new DataSet(); da.FillSchema(ds, SchemaType.Source, "com"); da.Fill(ds, "com"); string xmlpath = Server.MapPath("../xml"); ds.WriteXml(xmlpath+"/"+"comment.xml");
将XML文件里的数据读到DataSet中的某个表里:
DataSet ds = new DataSet(); string xmlpath=Server.MapPath("../xml/XMLFile1.xml"); ds.ReadXml(xmlpath); GridView1.DataSource = ds.Tables[0]; 或ds.Tables["次节点名"]; GridView1.DataBind();
可以看出ds的WriteXml()和ReadXml()这两个方法主要参数就是包括路径的文件名。
另外需要强调的一点是xml文件中的节点与ds和dt名的关系:
根节点名---------------------ds名(默认为NewDataSet)
次节点名---------------------dt名(默认为Table)
次节点里面的节点名---------字段名
所以不是任何结构的xml文件都能被正确的读到ds里的某一个dt中。
另外关于对XML文档进行约束,有两种方法:DTD和XSD(xml架构文件或Shema模式文件) 关于XML DTD XSD
ds与xsd有关的方法是ds.WriteXmlSchema()和ds.ReadXmlSchema()。