您的位置:首页 > 其它

将数据导出到xml,并从xml导入数据

2008-03-08 14:46 330 查看
将数据导出到xml,并从xml导入数据

xml本质上是数据,是另一种格式的数据。而ADO.NET就是用来处理数据的。因此通过DataSet可以非常方便的处理xml。下面这段程序对如下问题做出了解答:

怎样从DataSet得到xml?
生成的XML没有表之间的关系怎么办?
怎样把列数据作为子元素?(在利用数据集得到XML时)
怎样把列数据作为属性?(在利用数据集得到XML时)
怎样利用数据集形成XML文件?
怎样设置xml的namespace和prefix?
怎样控制控制文本的格式?
[align=left]怎样把XML文件里的数据读入数据集?[/align]
怎样利用XML文件传递数据集架构?
怎样利用XML文件在不同数据集之间传递更改?

[align=left]using System;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Data.OleDb;[/align]
[align=left]using General.ADONET;[/align]
[align=left]using General.ADONET.OLEDBClient;[/align]
[align=left]using System.IO;[/align]
[align=left]using System.Xml;[/align]
[align=left] [/align]
[align=left]namespace PlayXML[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// PlayXML 的摘要说明。[/align]
[align=left] ///</summary>[/align]
[align=left] public class XMLPlayer[/align]
[align=left] {[/align]
[align=left] public XMLPlayer()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // TODO: 在此处添加构造函数逻辑[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private Adapter adptEmp;[/align]
[align=left] private Adapter adptDept;[/align]
[align=left] private OleDbConnection conn;[/align]
[align=left] private DataSet dsHR;[/align]
[align=left] [/align]
[align=left] //初始化数据集[/align]
[align=left] public void InitDataSet()[/align]
[align=left] {[/align]
[align=left] string strConn = "Provider = Microsoft.Jet.OLEDB.4.0;";[/align]
[align=left] strConn += "Data Source = E://everyday//VS//HELPREN//hr.mdb;";[/align]
[align=left] this.conn = new OleDbConnection(strConn);[/align]
[align=left] [/align]
[align=left] dsHR = new DataSet();[/align]
[align=left] [/align]
[align=left] this.adptEmp = [/align]
[align=left] new Adapter(this.conn, dsHR, "employees");[/align]
[align=left] this.adptDept = [/align]
[align=left] new Adapter(this.conn, dsHR, "departments");[/align]
[align=left] [/align]
[align=left] this.adptDept.Fill();[/align]
[align=left] this.adptEmp.Fill();[/align]
[align=left] [/align]
[align=left] DataTable dtDept = this.dsHR.Tables["departments"];[/align]
[align=left] DataTable dtEmp = this.dsHR.Tables["employees"];[/align]
[align=left] [/align]
[align=left] DataColumn colParent = dtDept.Columns["dept_id"];[/align]
[align=left] DataColumn colChild = dtEmp.Columns["emp_department"];[/align]
[align=left] [/align]
[align=left] dsHR.Relations.Add([/align]
[align=left] "departments_employees", [/align]
[align=left] colParent, colChild);//关系[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样从DataSet得到xml?[/align]
[align=left] public void GetXml()[/align]
[align=left] {[/align]
[align=left] Console.WriteLine([/align]
[align=left] this.dsHR.GetXml()//这个方法就是从DataSet得到xml[/align]
[align=left] );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //生成的XML没有表之间的关系怎么办?[/align]
[align=left] public void GetXmlWithRalation()[/align]
[align=left] {[/align]
[align=left] //指定DataRelation在DataSet中进行嵌套[/align]
[align=left] //使xml序列化生成关系[/align]
[align=left] this.dsHR.Relations["departments_employees"].Nested = true;[/align]
[align=left] [/align]
[align=left] Console.WriteLine([/align]
[align=left] this.dsHR.GetXml()//这个方法就是从DataSet得到xml[/align]
[align=left] );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样把列数据作为子元素?(在利用数据集得到XML时)[/align]
[align=left] public void GetSubElements()[/align]
[align=left] {[/align]
[align=left] DataTable dtEmp = this.dsHR.Tables["employees"];[/align]
[align=left] foreach(DataColumn col in dtEmp.Columns)[/align]
[align=left] {[/align]
[align=left] //列的ColumnMapping属性设置为MappingType.Element就可以了[/align]
[align=left] col.ColumnMapping = MappingType.Element;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] DataTable dtDept = this.dsHR.Tables["departments"];[/align]
[align=left] foreach(DataColumn col in dtDept.Columns)[/align]
[align=left] {[/align]
[align=left] //列的ColumnMapping属性设置为MappingType.Element就可以了[/align]
[align=left] col.ColumnMapping = MappingType.Element;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] this.dsHR.GetXml();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样把列数据作为属性?(在利用数据集得到XML时)[/align]
[align=left] public void GetAttributes()[/align]
[align=left] {[/align]
[align=left] DataTable dtEmp = this.dsHR.Tables["employees"];[/align]
[align=left] foreach(DataColumn col in dtEmp.Columns)[/align]
[align=left] {[/align]
[align=left] //列的ColumnMapping属性设置为MappingType.Attribute就可以了[/align]
[align=left] col.ColumnMapping = MappingType.Attribute;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] DataTable dtDept = this.dsHR.Tables["departments"];[/align]
[align=left] foreach(DataColumn col in dtDept.Columns)[/align]
[align=left] {[/align]
[align=left] //列的ColumnMapping属性设置为MappingType.Attribute就可以了[/align]
[align=left] col.ColumnMapping = MappingType.Attribute;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] this.dsHR.GetXml();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样利用数据集形成XML文件?[/align]
[align=left] public void WriteXml()[/align]
[align=left] {[/align]
[align=left] //怎样设置xml的namespace和prefix?[/align]
[align=left] this.dsHR.Namespace = "ADONET";[/align]
[align=left] this.dsHR.Prefix = "an";[/align]
[align=left] [/align]
[align=left] this.dsHR.WriteXml("test.xml", XmlWriteMode.WriteSchema);[/align]
[align=left] [/align]
[align=left] //怎样控制控制文本的格式?[/align]
[align=left] StreamWriter sw = new StreamWriter("test2.xml");[/align]
[align=left] XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align]
[align=left] xmlWriter.Formatting = Formatting.Indented;[/align]
[align=left] xmlWriter.Indentation = 10;[/align]
[align=left] this.dsHR.WriteXml(xmlWriter);[/align]
[align=left] xmlWriter.Close(); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样把XML文件里的数据读入数据集?[/align]
[align=left] public void ReadXml()[/align]
[align=left] {[/align]
[align=left] DataSet dsNew = new DataSet();[/align]
[align=left] dsNew.ReadXml("test.xml");[/align]
[align=left] Console.WriteLine(dsNew.GetXml());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样利用XML文件传递数据集架构?[/align]
[align=left] public void TransmitSchema()[/align]
[align=left] {[/align]
[align=left] StreamWriter sw = new StreamWriter("test.xsd");[/align]
[align=left] XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align]
[align=left] this.dsHR.WriteXmlSchema(xmlWriter);[/align]
[align=left] xmlWriter.Close();[/align]
[align=left] [/align]
[align=left] DataSet dsNew = new DataSet();[/align]
[align=left] dsNew.ReadXmlSchema("test.xsd");[/align]
[align=left] [/align]
[align=left] foreach(DataTable dt in dsNew.Tables)[/align]
[align=left] {[/align]
[align=left] Console.WriteLine(dt.TableName);[/align]
[align=left] foreach(DataColumn dc in dt.Columns)[/align]
[align=left] {[/align]
[align=left] Console.WriteLine(" " + dc.ColumnName);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //怎样利用XML文件在不同数据集之间传递更改?[/align]
[align=left] public void PlayDiffGram()[/align]
[align=left] {[/align]
[align=left] //为两个datatable设置主键[/align]
[align=left] DataTable dtEmp = this.dsHR.Tables["employees"];[/align]
[align=left] DataTable dtDept = this.dsHR.Tables["departments"];[/align]
[align=left] dtEmp.PrimaryKey = new DataColumn[][/align]
[align=left] {dtEmp.Columns["emp_id"]};[/align]
[align=left] dtDept.PrimaryKey = new DataColumn[][/align]
[align=left] {dtDept.Columns["dept_id"]};[/align]
[align=left] [/align]
[align=left] //把数据集写到xml文件[/align]
[align=left] StreamWriter sw = new StreamWriter("test.xml");[/align]
[align=left] XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align]
[align=left] this.dsHR.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);[/align]
[align=left] sw.Close();[/align]
[align=left] [/align]
[align=left] //从xml文件读入数据到一个新的数据集里[/align]
[align=left] DataSet dsNew = new DataSet();[/align]
[align=left] dsNew.ReadXml("test.xml", XmlReadMode.ReadSchema);[/align]
[align=left] dsNew.AcceptChanges();[/align]
[align=left] [/align]
[align=left] //修改值[/align]
[align=left] this.dsHR.Tables["employees"].Rows[0]["emp_name"] = "aaaaa";[/align]
[align=left] dsNew.Tables["employees"].Rows[0]["emp_name"] = "ccccc";[/align]
[align=left] [/align]
[align=left] //把新数据集里的数据输出到xml文件[/align]
[align=left] Stream newStream = new MemoryStream() as Stream;[/align]
[align=left] XmlTextWriter xmlNewWriter = [/align]
[align=left] new XmlTextWriter(newStream, null);[/align]
[align=left] xmlNewWriter.Formatting = Formatting.Indented;[/align]
[align=left] dsNew.GetChanges().WriteXml(xmlNewWriter, XmlWriteMode.DiffGram);[/align]
[align=left] [/align]
[align=left] //显示现在xml文件的内容[/align]
[align=left] newStream.Position = 0;[/align]
[align=left] StreamReader rdr = new StreamReader(newStream);[/align]
[align=left] Console.WriteLine(rdr.ReadToEnd());[/align]
[align=left] [/align]
[align=left] newStream.Position = 0;[/align]
[align=left] [/align]
[align=left] //把现在的xml文件的内容读到原先的那个数据集[/align]
[align=left] this.dsHR.ReadXml(newStream, XmlReadMode.DiffGram);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: