在实际项目中遇到一XML问题,用DataSet.GetXml()的方法只能返回字段不能为空的标签,如果再用此XML文件去UpData数据库,因为结构不一样,就会导致更新失败。求解决方案。

解决方案 »

  1.   

    可以考虑GetXmlSchema这个方法。
    在更新Xml回数据库的时候:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("刚才读出来的XmlSchema");
    ds.BeginInit();
    ds.ReadXml("要更改的Xml");
    ds.EndInit();
    这样更新回去就没有问题了。
      

  2.   

    你要读的XML文件结构是良构的吗?
    在VS中打开点右键"查看数据"时会不会出错?
      

  3.   

    查看数据不会出错,我用二楼朋友介绍的方法,先读架构,再读数据,最后Updata(),也没出错,但是不知道为什么数据库没更新。调试发现DataSet中没数据,ds.ReadXml("要更改的Xml");难道这句有错吗?
    附上准备更新的XML :<?xml version="1.0" encoding="gb2312" ?>
    <NewDataSet xmlns="http://tempuri.org/tbOption1.xsd">
    <tbOption>
    <PKID>6</PKID>
    <UVID>001</UVID>
    <OptName>optCustomer_EN</OptName>
    <OptVal>CompanyName</OptVal>
    <Type>系统类</Type>
    <Status>正常状态</Status>
    <Re>公司名称_英文</Re>
    <UpdateTime>2004-09-02T15:28:26.1400000+08:00</UpdateTime>
    <Selected>false</Selected>
    <MakeTime>2004-09-02T15:28:26.1400000+08:00</MakeTime>
    </tbOption>
    </NewDataSet>
      

  4.   

    DataSet ds = new DataSet();
    ds.ReadXmlSchema("刚才读出来的XmlSchema");
    ds.BeginInit();
    ds.ReadXml("要更改的Xml");
    ds.EndInit();
    在这段代码中,如果XmlSchema的结构和包含数据的Xml结构不一致,会导致读取数据失败?
      

  5.   

    结构不一样,可能会引起错误。
    如果xml中的node在schema中没有就会引起错误,我没有实践过。我想问一下你的xml是怎么生成的?
    是自己写的呢?还是通过DataSet.WriteXml来生成的。如果是通过DataSet.WriteXml来生成的话,
    我的做法是:
    先写DataSet.WriteSchemaXml("Shema文件名称");
    用DataSet.WriteXml("文件名称", XmlWriteMode.DiffGram);
    这样的话会帮DataSet里的数据的状态写入文件里。更新的时候先:
    DataSet.ReadSchemaXml("Schema文件");
    DataSet.ReadXml("文件名称", XmlReadMode.DiffGram);
    这样你的DataSet里的数据就有状态了,再用DataSet去更新数据库的时候,它会去取DataSet.GetChanges(),如果没有状态的话,DataSet里的DataSet.GetChanges()是不存在的。你说的调试发现DataSet中没数据,也有可能就是这样原因引起的。
      

  6.   

    楼上的兄弟,有些细节问题需要讨论一下,MSN:[email protected]