DataSet.ReadXml 方法

定義

將 XML 結構描述和資料讀入 DataSet

多載

ReadXml(XmlReader, XmlReadMode)

使用指定的 DataSetXmlReader,將 XML 結構描述和資料讀入 XmlReadMode

ReadXml(String, XmlReadMode)

使用指定的檔案和 DataSet,將 XML 結構描述和資料讀入 XmlReadMode

ReadXml(Stream, XmlReadMode)

使用指定的 DataSetStream,將 XML 結構描述和資料讀入 XmlReadMode

ReadXml(TextReader, XmlReadMode)

使用指定的 DataSetTextReader,將 XML 結構描述和資料讀入 XmlReadMode

ReadXml(String)

使用指定的檔案,將 XML 結構描述和資料讀入 DataSet

ReadXml(TextReader)

使用指定的 DataSet,將 XML 結構描述和資料讀入 TextReader

ReadXml(Stream)

使用指定的 DataSet,將 XML 結構描述和資料讀入 Stream

ReadXml(XmlReader)

使用指定的 DataSet,將 XML 結構描述和資料讀入 XmlReader

ReadXml(XmlReader, XmlReadMode)

使用指定的 DataSetXmlReader,將 XML 結構描述和資料讀入 XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader, System::Data::XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader? reader, System.Data.XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader reader, System.Data.XmlReadMode mode);
member this.ReadXml : System.Xml.XmlReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
Public Function ReadXml (reader As XmlReader, mode As XmlReadMode) As XmlReadMode

參數

reader
XmlReader

要讀取的來源 XmlReader

mode
XmlReadMode

其中一個 XmlReadMode 值。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

備註

方法 ReadXml 可讓您唯讀取資料或從 XML 檔將資料和架構讀取到 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中一個 ReadXML 多載,並將其值設定為 ReadSchema

請注意,和 WriteXmlSchema 方法的相同 WriteXml 是分別的。 若要寫入 XML 資料,或從 DataSet 撰寫架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要從 中讀取或寫入實 IDynamicMetaObjectProvider 作的資料行類型 DataRow ,而且不會實 IXmlSerializable 作 ,則會擲回 。

如果指定內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果有任何衝突 (,則會引發例外狀況) ,以不同資料類型定義之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet不會將 XML 元素與其對應的 DataColumn DataTable 或當序列化 XML 中逸出 (「_」) 等合法 XML 字元時產生關聯。 本身 DataSet 只會逸出 XML 專案名稱中的不合法的 XML 字元,因此只能使用相同的字元。 當逸出 XML 專案名稱中的法務字元時,處理時會忽略 專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 含有不含限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的專案,請在 XML 架構中設定 elementFormDefault 等於 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱的專案,但類型不同,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSet ReadXml XmlReadMode.ReadSchema 時,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(String, XmlReadMode)

使用指定的檔案和 DataSet,將 XML 結構描述和資料讀入 XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName, System::Data::XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (string fileName, System.Data.XmlReadMode mode);
member this.ReadXml : string * System.Data.XmlReadMode -> System.Data.XmlReadMode
Public Function ReadXml (fileName As String, mode As XmlReadMode) As XmlReadMode

參數

fileName
String

要讀取的檔案名稱 (包括路徑)。

mode
XmlReadMode

其中一個 XmlReadMode 值。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

例外狀況

FileIOPermission 並不是設定為 Read

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果有任何衝突 (,則會引發例外狀況) ,以不同資料類型定義之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet不會將 XML 元素與其對應的 DataColumn DataTable 或當序列化 XML 中逸出 (「_」) 等合法 XML 字元時產生關聯。 本身 DataSet 只會逸出 XML 專案名稱中的不合法的 XML 字元,因此只能使用相同的字元。 當逸出 XML 專案名稱中的法務字元時,處理時會忽略 專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 含有不含限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的專案,請在 XML 架構中設定 elementFormDefault 等於 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱的專案,但類型不同,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSet ReadXml XmlReadMode.ReadSchema 時,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(Stream, XmlReadMode)

使用指定的 DataSetStream,將 XML 結構描述和資料讀入 XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream, System::Data::XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.IO.Stream? stream, System.Data.XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.IO.Stream stream, System.Data.XmlReadMode mode);
member this.ReadXml : System.IO.Stream * System.Data.XmlReadMode -> System.Data.XmlReadMode
Public Function ReadXml (stream As Stream, mode As XmlReadMode) As XmlReadMode

參數

stream
Stream

要讀取的來源 Stream

mode
XmlReadMode

其中一個 XmlReadMode 值。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

WriteXml WriteXmlSchema 和 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

當您使用 ReadXml 和 設定 XmlReadModeDiffgram 時,目標和 DataSet 原始 DataSet 的內容可能會因為產生及處理差異圖的方式而有所不同。 如需 diffgram 的詳細資訊,請參閱 DiffGrams

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(TextReader, XmlReadMode)

使用指定的 DataSetTextReader,將 XML 結構描述和資料讀入 XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader, System::Data::XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader? reader, System.Data.XmlReadMode mode);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader reader, System.Data.XmlReadMode mode);
member this.ReadXml : System.IO.TextReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
Public Function ReadXml (reader As TextReader, mode As XmlReadMode) As XmlReadMode

參數

reader
TextReader

要讀取的來源 TextReader

mode
XmlReadMode

其中一個 XmlReadMode 值。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(String)

使用指定的檔案,將 XML 結構描述和資料讀入 DataSet

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName);
public System.Data.XmlReadMode ReadXml (string fileName);
member this.ReadXml : string -> System.Data.XmlReadMode
Public Function ReadXml (fileName As String) As XmlReadMode

參數

fileName
String

要讀取的檔案名稱 (包括路徑)。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

例外狀況

FileIOPermission 並不是設定為 Read

範例

下列範例會先建立具有一個 DataTable 、兩個數據行和十個數據列的簡單 DataSet 。 叫用 方法會將 DataSet 架構和資料寫入磁片 WriteXml 。 系統會建立第二 DataSet 個 ,並使用 ReadXml 方法來填入架構和資料。

private void DemonstrateReadWriteXMLDocumentWithStreamReader()
{
    // Create a DataSet with one table and two columns.
    DataSet OriginalDataSet = new DataSet("dataSet");
    OriginalDataSet.Namespace= "NetFrameWork";
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    OriginalDataSet.Tables.Add(table);

    // Add ten rows.
    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    OriginalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet");

    // Write the schema and data to an XML file.
    string xmlFilename = "XmlDocument.xml";

    // Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlFilename);

    // Dispose of the original DataSet.
    OriginalDataSet.Dispose();

    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlFilename);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithStreamReader()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("dataSet")
    OriginalDataSet.Namespace = "NetFrameWork"
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    OriginalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    OriginalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet 
    ' using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet")

    ' Write the schema and data to an XML file.
    Dim xmlFilename As String = "XmlDocument.xml"

    ' Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlFilename)

    ' Dispose of the original DataSet.
    OriginalDataSet.Dispose()

    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlFilename)

    ' Print out values of each table in the DataSet 
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
    
Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        Dim row As DataRow
        For Each row In  table.Rows
            Dim column As DataColumn
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                    row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(TextReader)

使用指定的 DataSet,將 XML 結構描述和資料讀入 TextReader

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader reader);
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As TextReader) As XmlReadMode

參數

reader
TextReader

要從中讀取結構描述和資料的 TextReader

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

下列範例會先建立具有一個 DataTable 、兩個數據行和十個數據列的簡單 DataSet 。 叫用 方法會將 DataSet 架構和資料寫入磁片 WriteXml 。 系統會建立第二 DataSet 個 ,並使用 ReadXml 方法來填入架構和資料。

private void DemonstrateReadWriteXMLDocumentWithFileStream()
{
    // Create a DataSet with one table and two columns.
    DataSet originalDataSet = new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    originalDataSet.Tables.Add(table);
    // Add ten rows.

    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    originalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(originalDataSet, "Original DataSet");

    // Write the schema and data to XML file with FileStream.
    string xmlFilename = "XmlDocument.xml";
    System.IO.FileStream streamWrite = new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite);

    // Close the FileStream.
    streamWrite.Close();

    // Dispose of the original DataSet.
    originalDataSet.Dispose();
    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream streamRead = new System.IO.FileStream
        (xmlFilename,System.IO.FileMode.Open);
    newDataSet.ReadXml(streamRead);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim originalDataSet As New DataSet("dataSet")
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
       Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    originalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    originalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet 
    ' using the function defined below.
    PrintValues(originalDataSet, "Original DataSet")

    ' Write the schema and data to XML file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"
    Dim streamWrite As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)

    ' Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite)

    ' Close the FileStream.
    streamWrite.Close()
     
    ' Dispose of the original DataSet.
    originalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")
       
    ' Read the XML document back in. 
    ' Create new FileStream to read schema with.
    Dim streamRead As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Open)
     
    newDataSet.ReadXml(streamRead)
    ' Print out values of each table in the DataSet  
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
   
Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)         
        For Each row In  table.Rows             
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                   row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

繼承自 類別的 TextReader 類別包括 StreamReaderStringReader 類別。

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(Stream)

使用指定的 DataSet,將 XML 結構描述和資料讀入 Stream

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream);
public System.Data.XmlReadMode ReadXml (System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml (System.IO.Stream stream);
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
Public Function ReadXml (stream As Stream) As XmlReadMode

參數

stream
Stream

衍生自 Stream 的物件。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

下列範例會先建立具有一個 DataTable 、兩個數據行和十個數據列的簡單 DataSet 。 叫用 方法會將 DataSet 架構和資料寫入磁片 WriteXml 。 系統會建立第二 DataSet 個 ,並使用 ReadXml 方法來填入架構和資料。

private void DemonstrateReadWriteXMLDocumentWithFileStream()
{
    // Create a DataSet with one table and two columns.
    DataSet originalDataSet = new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    originalDataSet.Tables.Add(table);
    // Add ten rows.

    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    originalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(originalDataSet, "Original DataSet");

    // Write the schema and data to XML file with FileStream.
    string xmlFilename = "XmlDocument.xml";
    System.IO.FileStream streamWrite = new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite);

    // Close the FileStream.
    streamWrite.Close();

    // Dispose of the original DataSet.
    originalDataSet.Dispose();
    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream streamRead = new System.IO.FileStream
        (xmlFilename,System.IO.FileMode.Open);
    newDataSet.ReadXml(streamRead);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim originalDataSet As New DataSet("dataSet")
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
       Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    originalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    originalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet 
    ' using the function defined below.
    PrintValues(originalDataSet, "Original DataSet")

    ' Write the schema and data to XML file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"
    Dim streamWrite As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)

    ' Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite)

    ' Close the FileStream.
    streamWrite.Close()
     
    ' Dispose of the original DataSet.
    originalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")
       
    ' Read the XML document back in. 
    ' Create new FileStream to read schema with.
    Dim streamRead As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Open)
     
    newDataSet.ReadXml(streamRead)
    ' Print out values of each table in the DataSet  
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
   
Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)         
        For Each row In  table.Rows             
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                   row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於

ReadXml(XmlReader)

使用指定的 DataSet,將 XML 結構描述和資料讀入 XmlReader

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader reader);
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As XmlReader) As XmlReadMode

參數

reader
XmlReader

要讀取的來源 XmlReader

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

下列範例會先建立具有一個 DataTable 、兩個數據行和十個數據列的簡單 DataSet 。 叫用 方法會將 DataSet 架構和資料寫入磁片 WriteXml 。 系統會建立第二 DataSet 個 ,並使用 ReadXml 方法來填入架構和資料。

private void DemonstrateReadWriteXMLDocumentWithXMLReader()
{
    // Create a DataSet with one table and two columns.
    DataSet OriginalDataSet = new DataSet("dataSet");
    OriginalDataSet.Namespace= "NetFrameWork";
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    OriginalDataSet.Tables.Add(table);

    // Add ten rows.
    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    OriginalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet");

    // Write the XML schema and data to file with FileStream.
    string xmlFilename = "XmlDocument.xml";

    // Create FileStream
    System.IO.FileStream fsWriteXml =
        new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Create an XmlTextWriter to write the file.
    System.Xml.XmlTextWriter xmlWriter =
        new System.Xml.XmlTextWriter
        (fsWriteXml, System.Text.Encoding.Unicode);

    // Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);

    // Close the FileStream.
    fsWriteXml.Close();

    // Dispose of the original DataSet.
    OriginalDataSet.Dispose();

    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream fsReadXml =
        new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Open);

    // Create an XmlTextReader to read the file.
    System.Xml.XmlTextReader xmlReader =
        new System.Xml.XmlTextReader(fsReadXml);

    // Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlReader, XmlReadMode.ReadSchema);

    // Close the XmlTextReader
    xmlReader.Close();

    // Print out values of each table in the DataSet
    // fusing the unction defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\t{0}({1})='{2}'", column.ColumnName, column.DataType.Name, row[column]);
            }
            Console.WriteLine();
        }
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithXMLReader()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("dataSet")
    OriginalDataSet.Namespace = "NetFrameWork"
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    OriginalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    OriginalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet 
    ' using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet")

    ' Write the XML schema and data to file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"

    ' Create FileStream    
    Dim fsWriteXml As New System.IO.FileStream _
        (xmlFilename, System.IO.FileMode.Create)

    ' Create an XmlTextWriter to write the file.
    Dim xmlWriter As New System.Xml.XmlTextWriter _
        (fsWriteXml, System.Text.Encoding.Unicode)

    ' Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlWriter, XmlWriteMode.WriteSchema)

    ' Close the FileStream.
    fsWriteXml.Close()
        
    ' Dispose of the original DataSet.
    OriginalDataSet.Dispose()

    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")
        
    ' Read the XML document back in. 
    ' Create new FileStream to read schema with.
    Dim fsReadXml As New System.IO.FileStream _
        (xmlFilename, System.IO.FileMode.Open)

    ' Create an XmlTextReader to read the file.
    Dim xmlReader As New System.Xml.XmlTextReader(fsReadXml)

    ' Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlReader, XmlReadMode.ReadSchema)

    ' Close the XmlTextReader
    xmlReader.Close()
        
    ' Print out values of each table in the DataSet using the 
    ' function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
    
    
 Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     Dim row As DataRow
     Dim column As DataColumn
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
         For Each row In  table.Rows
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & "{0}({1})='{2}'", column.ColumnName, column.DataType.Name, row(column).ToString())

             Next column
             Console.WriteLine()
         Next row
     Next table
  End Sub

備註

方法 ReadXml 提供一種方式,唯讀取資料,或是從 XML 檔讀取資料和架構 DataSet ,而 ReadXmlSchema 方法則唯讀取架構。 若要讀取資料和架構,請使用包含 mode 參數的其中 ReadXML 一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 資料,或同時 DataSet 寫入架構和資料,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

注意

InvalidOperationException如果要讀取或寫入至 實 IDynamicMetaObjectProvider 作且未實 IXmlSerializable 作 的資料行類型, DataRow 則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入資料之前擴充現有的關聯式結構。 例如,如果發生任何衝突 (,則會引發例外狀況) 定義于不同資料類型之相同資料表中的相同資料行。

如果未指定內嵌架構,則根據 XML 檔的結構,關聯式結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有資料,則會引發例外狀況。

注意

DataSet在序列化 XML 中逸出 (「_」) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 專案名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 專案名稱中的法務字元時,處理時會忽略專案。

如果 的 DataSet XML 架構包含 targetNamespace ,則可能不會讀取資料,而且當您呼叫 ReadXml 以載入 DataSet 包含沒有限定命名空間之專案的 XML 時,可能會遇到例外狀況。 若要讀取不合格的元素,請將 設定 elementFormDefault 為 XML 架構中的 「qualified」,如下列範例所示。

<xsd:schema id="MyDataSet"   
   elementFormDefault="qualified"   
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns="http://www.tempuri.org/MyDataSet.xsd"   
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
</xsd:schema>  

System.Xml.XmlTextReader 繼承自 XmlReader

注意

如果您的架構 DataSet 包含相同名稱但類型不同的專案,在相同的命名空間中,當您嘗試使用 將架構讀取至 DataSetReadXml XmlReadMode.ReadSchema ,就會擲回例外狀況。 如果您使用 .NET Framework 1.0 版,則不會發生此例外狀況。

另請參閱

適用於