DataSet.ReadXml 方法

定義

將 XML 結構與資料讀取到 DataSet.

多載

名稱 Description
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)

利用指定的 DataSetXML 結構與資料讀取。TextReader

ReadXml(Stream)

利用指定的 DataSetXML 結構與資料讀取。Stream

ReadXml(XmlReader)

利用指定的 DataSetXML 結構與資料讀取。XmlReader

ReadXml(XmlReader, XmlReadMode)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetXmlReader讀取 XML 結構與資料。XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader, System::Data::XmlReadMode mode);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.Xml.XmlReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
member this.ReadXml : System.Xml.XmlReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 會讀取資料。

屬性

備註

ReadXml 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML 架構包含 targetNamespace,資料可能無法讀取,且在 ReadXml 呼叫載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(String, XmlReadMode)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的檔案和 DataSet,將 XML 架構和資料讀入 XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName, System::Data::XmlReadMode mode);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName, System.Data.XmlReadMode mode);
public System.Data.XmlReadMode ReadXml(string fileName, System.Data.XmlReadMode mode);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName, System.Data.XmlReadMode mode);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : string * System.Data.XmlReadMode -> System.Data.XmlReadMode
member this.ReadXml : string * System.Data.XmlReadMode -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 會讀取資料。

屬性

例外狀況

備註

ReadXml 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML 架構包含 targetNamespace,資料可能無法讀取,且在 ReadXml 呼叫載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(Stream, XmlReadMode)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetStream讀取 XML 結構與資料。XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream, System::Data::XmlReadMode mode);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.Stream * System.Data.XmlReadMode -> System.Data.XmlReadMode
member this.ReadXml : System.IO.Stream * System.Data.XmlReadMode -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 會讀取資料。

屬性

備註

ReadXml 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

與方法分別也是WriteXmlWriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

當你使用 ReadXml 並設定 XmlReadModeDiffgram時,目標 DataSet 和原始 DataSet 的內容可能會因為 diffgram 的產生和處理方式不同而有所不同。 欲了解更多有關微分圖的資訊,請參見 DiffGrams

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML Schema 包含 targetNamespace,資料可能無法讀取,且在呼叫 ReadXml 載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(TextReader, XmlReadMode)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetTextReader讀取 XML 結構與資料。XmlReadMode

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader, System::Data::XmlReadMode mode);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.TextReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
member this.ReadXml : System.IO.TextReader * System.Data.XmlReadMode -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 會讀取資料。

屬性

備註

ReadXml 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML Schema 包含 targetNamespace,資料可能無法讀取,且在呼叫 ReadXml 載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(String)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的檔案讀取 XML 結構與資料。DataSet

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName);
public System.Data.XmlReadMode ReadXml(string fileName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : string -> System.Data.XmlReadMode
member this.ReadXml : string -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : string -> System.Data.XmlReadMode
Public Function ReadXml (fileName As String) As XmlReadMode

參數

fileName
String

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

傳回

他們 XmlReadMode 會讀取資料。

屬性

例外狀況

範例

以下範例首先建立一個包含一DataSet、兩欄和十列的簡單體DataTableDataSet結構與資料透過呼叫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 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML 架構包含 targetNamespace,資料可能無法讀取,且在 ReadXml 呼叫載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(TextReader)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetXML 結構與資料讀取。TextReader

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml(System.IO.TextReader reader);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As TextReader) As XmlReadMode

參數

reader
TextReader

從中 TextReader 讀取結構與資料。

傳回

他們 XmlReadMode 會讀取資料。

屬性

範例

以下範例首先建立一個包含一DataSet、兩欄和十列的簡單體DataTableDataSet結構與資料透過呼叫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 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML Schema 包含 targetNamespace,資料可能無法讀取,且在呼叫 ReadXml 載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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 類別。

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於

ReadXml(Stream)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetXML 結構與資料讀取。Stream

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml(System.IO.Stream stream);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
Public Function ReadXml (stream As Stream) As XmlReadMode

參數

stream
Stream

一個由 Stream衍生出來的物件。

傳回

他們 XmlReadMode 會讀取資料。

屬性

範例

以下範例首先建立一個包含一DataSet、兩欄和十列的簡單體DataTableDataSet結構與資料透過呼叫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 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML Schema 包含 targetNamespace,資料可能無法讀取,且在呼叫 ReadXml 載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請在 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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>

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

適用於

ReadXml(XmlReader)

來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs
來源:
DataSet.cs

利用指定的 DataSetXML 結構與資料讀取。XmlReader

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader reader);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As XmlReader) As XmlReadMode

參數

reader
XmlReader

閱讀的來源 XmlReader

傳回

他們 XmlReadMode 會讀取資料。

屬性

範例

以下範例首先建立一個包含一DataSet、兩欄和十列的簡單體DataTableDataSet結構與資料透過呼叫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 方法提供一種僅讀取資料,或同時讀取資料與結構的資料 DataSet ,從 XML 文件中讀取的方法,而該 ReadXmlSchema 方法僅讀取結構。 要同時讀取資料與結構,請使用包含參數的ReadXML超載,mode並將其值設為 ReadSchema

請注意,與WriteXml方法分別也是WriteXmlSchema同理。 若要撰寫 XML 資料,或同時撰寫結構與資料 DataSet,請使用該 WriteXml 方法。 如果只寫結構,就用這個 WriteXmlSchema 方法。

Note

InvalidOperationException若被讀取或寫DataRow入的欄位IDynamicMetaObjectProvider類型將被拋出,且未實作 IXmlSerializable

若指定內聯結構,則在載入資料前,內行結構用於擴充現有關聯結構。 若存在衝突(例如同一資料表中同一欄位以不同資料型態定義),會提出例外。

若未指定內列結構,則根據 XML 文件的結構,透過推理擴展關聯結構。 若無法透過推理擴展結構以暴露所有資料,則會提出例外。

Note

DataSet序列化 XML 中合法的 XML 字元如「_」逃逸時,也不會將 XML 元素與其對應DataColumnDataTable元素關聯。 本身 DataSet 只能逃逸 XML 元素名稱中的非法 XML 字元,因此只能消耗相同的資料。 當 XML 元素名稱中的法律字元被逃逸時,該元素在處理過程中會被忽略。

如果 的 DataSet XML 架構包含 targetNamespace,資料可能無法讀取,且在 ReadXml 呼叫載入 DataSet 包含無限定命名空間元素的 XML 時,可能會遇到異常。 若要讀取未限定元素,請將您的 XML 架構中將 等值設 elementFormDefault 為「限定」,如下範例所示。

<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

Note

如果 你的 DataSet 結構包含相同名稱但類型不同且位於相同命名空間的元素,當你嘗試將結構讀取並 DataSet 指定 ReadXmlXmlReadMode.ReadSchema時,會拋出一個例外。 若使用 .NET Framework 1.0 版本,則不會發生此例外。

另請參閱

  • 使用 ADO.NET

適用於