本帖最后由 mb892535077 于 2013-03-07 09:52:59 编辑

解决方案 »

  1.   

    XML数据可遍历读取,也可转DataTable
      

  2.   

    读取XML 创建表,插入数据。
      

  3.   

    符合xml格式规范,用下面这个/// 通过传入的xml文件路径(含文件名),将格式化的Xml文件自动读取转换为DataSet。
    public static DataSet GetDataSetByXmlpath(string strXmlPath)
    {
               try
               {
                   DataSet ds = new DataSet();
                   //读取XML到DataSet                StreamReader sr = new StreamReader(strXmlPath, Encoding.Default);                ds.ReadXml(sr);                sr.Close();                if (ds.Tables.Count > 0)
                       return ds;
                   return null;
               }
               catch (Exception)
               {
                   return null;
               }
    }
    不符合规范,只有解析读取
      

  4.   

    谢谢大家的回复 比如xml文件如下:
    <?xml version="1.0" encoding="utf-8"?>
    <TestDataSet xmlns="http://tempuri.org/TestDataSet.xsd">
      <xs:schema id="TestDataSet" targetNamespace="http://tempuri.org/TestDataSet.xsd" xmlns:mstns="http://tempuri.org/TestDataSet.xsd" xmlns="http://tempuri.org/TestDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
        <xs:element name="TestDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="REJIMDSOU" msprop:BaseTable.0="REJIMDSOU">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="UKENO" msprop:OraDbType="126" msprop:BaseColumn="UKENO" type="xs:string" minOccurs="0" />
                    <xs:element name="HOKEN" msprop:OraDbType="126" msprop:BaseColumn="HOKEN" type="xs:string" minOccurs="0" />
                    <xs:element name="TEST" msprop:OraDbType="104" msprop:BaseColumn="TEST" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      <REJIMDSOU>
        <UKENO>00420019</UKENO>
        <HOKEN>00420019</HOKEN>
        <TEST>11                                                </TEST>
      </REJIMDSOU>
      <REJIMDSOU>
        <UKENO>test</UKENO>
        <HOKEN>test</HOKEN>
        <TEST>11                                                </TEST>
      </REJIMDSOU>
    </TestDataSet>将其读入dataset后 怎么写入数据库呢?
    我如果从节点读在通过SqlDataAdapter.update 写入 
    我写过代码是
    SqlConnection conn = new SqlConnection(数据库连接);
                        SqlDataAdapter da = new SqlDataAdapter("select * from REJIMDSOU", conn);
                        SqlCommandBuilder cmdb = new SqlCommandBuilder(da);
                        conn.Open();
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns[0] }; 
                        da.InsertCommand = cmdb.GetInsertCommand();  
                        //da.UpdateCommand = cmdb.GetUpdateCommand();  
                        //da.DeleteCommand = cmdb.GetDeleteCommand();
                        ds.ReadXml(xmlfile);
                        da.Update(ds);
    这样向数据库中存不进去,这样代码是否有问题。。请各位大侠指教
      

  5.   

    请问存入dataset后怎么存入数据库? 因为节点是不确定的,我不知道怎么遍历
      

  6.   

    @xml文件本来可以作为参数传递到数据库的.
    在数据库中遍历操作就可以了.
      

  7.   


    CREATE PROCEDURE [dbo].[P_Test]
    (
         @xml         xml            =null )
    AS
    BEGIN
    --批量更新
     update tableA set stat=u.c.value('testID[1]','int')
     from @xml.nodes('(/root/Test)')  u(c) where tableA .ID=u.c.value('ID[1]','int')
    END  使用@xml和表一样,MS你上面的@xml文件很不规则,具体在实际业务中看是否可以应用.
      

  8.   

    谢谢各位了,问题解决了我是直接通过遍历dataset 再通过DataAdapter.Update(dataset)的方式做的先前钻进死胡同了