【问题标题】:Filling XML data to DataSet将 XML 数据填充到 DataSet
【发布时间】:2015-03-24 08:42:16
【问题描述】:

我有一个以下格式的 XML。将数据填充到 Dataset 的最佳方法是什么?

<VariableTable>
    <InternalName Old="sujith" New="sujitha" /> 
    <InternalName Old="renjith" New="renjitha" /> 
</VariableTable>

【问题讨论】:

    标签: c# xml dataset


    【解决方案1】:

    Dataset.ReadXML() 方法,你可以使用它,也检查这个链接Reading xml in Dataset

    有很多选择。

    1. 提供您的 xml 文件路径,然后将其加载到数据集
    2. 使用 XmlTextReader,将其传递给 Dataset readxml 方法
    string xmlFilename = "XmlFilePath.xml";
             DataSet yourDataset = new DataSet();
             yourDataset.ReadXml(xmlFilename);
             // do with your filled Dataset
    

    【讨论】:

      【解决方案2】:

      如果您可以稍微更改 XML,那么 DataSets 提供内置功能来加载和保存数据到/从 xml。

      然后你可以使用方法 写Xml() ReadXml()

      如果您需要加载自定义 xml 文件格式,那么您需要编写代码来解析它并填充数据集。为此,您可以使用 Linq 或 XPath。

      希望对您有所帮助。

      更新

          var dataSet = new DataSet("TestDataSet");
          var dataTable = new DataTable("TestTable");
      
          dataTable.Columns.Add("ID", typeof(Int32));
          dataTable.Columns.Add("Value", typeof(string));
      
          dataTable.Rows.Add(1, "Value1");
          dataSet.Tables.Add(dataTable);
      
          dataSet.WriteXml(@"L:\ds.xml", XmlWriteMode.WriteSchema);
      

      上面的代码是我在 WriteToXml 方法中使用的。 不,这是输出 XML 格式。

      <?xml version="1.0" standalone="yes"?>
      <TestDataSet>
        <xs:schema id="TestDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
          <xs:element name="TestDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="TestTable">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="ID" type="xs:int" minOccurs="0" />
                      <xs:element name="Value" type="xs:string" minOccurs="0" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <TestTable>
          <ID>1</ID>
          <Value>Value1</Value>
        </TestTable>
      </TestDataSet>
      

      这就是将数据存储在 XML 中的方式...

      如果您需要一些简单的东西,这可能会有点开销,但这是开箱即用的功能。

      这是否让您知道如何做到这一点?

      【讨论】:

      • 我应该对xml进行什么修改?
      • 查看更新后的帖子以查看您需要的 xml 格式。这包括 XML 架构。
      【解决方案3】:
      Public Function FillDataSetFromXML(ByVal Procedure As String, ByVal param As List(Of SqlParameter)) As DataSet
          Dim dbcon As New dbConnection()
          Dim cmd As New SqlCommand()
          Dim ds As New DataSet()
          Dim XR As XmlReader
          XR = Nothing
          Try
              cmd.CommandType = CommandType.StoredProcedure
              cmd.CommandText = Procedure
              dbcon.OpenConnection()
              cmd.Connection = dbcon.GetDbConnection()
              If param.Count > 0 Then
                  For Each p As SqlParameter In param
                      cmd.Parameters.AddWithValue(p.ParameterName, p.Value)
                  Next
              End If
              XR = cmd.ExecuteXmlReader()
              ds.ReadXml(XR)
              Return ds
          Catch ex As Exception
              Return ds
          Finally
              dbcon.CloseConnection()
          End Try
      
      End Function
      
      Public Function ExecuteScalar(ByVal Qry As String)
          Dim dbcon As New dbConnection
          Dim cmd As New SqlCommand
          Dim res As String
          Try
              cmd.CommandType = CommandType.Text
              cmd.CommandText = Qry
              dbcon.OpenConnection()
              cmd.Connection = dbcon.GetDbConnection()
              res = cmd.ExecuteScalar().ToString()
              Return res
      
          Catch ex As Exception
              Return res
          Finally
              dbcon.CloseConnection()
          End Try       
      End Function
      
      Public Function ExecuteProdedures(ByVal param As List(Of SqlParameter), ByVal Procedure As String) As DataSet
      
          Dim dbcon As New dbConnection
          Dim ds As New DataSet()
      
          Try
              Dim cmd As New SqlCommand()
              cmd.CommandType = CommandType.StoredProcedure
              cmd.CommandText = Procedure
              dbcon.OpenConnection()
              cmd.Connection = dbcon.GetDbConnection()
              If param.Count > 0 Then
                  For Each p As SqlParameter In param
                      'cmd.Parameters.AddWithValue(p.ParameterName, p.Value)
                      cmd.Parameters.Add(p)
                  Next
              End If
              Dim XR As XmlReader
              XR = cmd.ExecuteXmlReader()
              ds.ReadXml(XR)
              Return ds
          Catch ex As Exception
          Finally
              dbcon.CloseConnection()
          End Try
      End Function
      

      【讨论】:

      • 没有解释的巨大代码墙很少是非常好的或有用的答案。尤其是对于 3 年前的问题已经接受了答案。
      猜你喜欢
      • 2019-07-23
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多