次の方法で共有


DataSet.ReadXml メソッド (Stream)

指定した System.IO.Stream を使用して、XML スキーマとデータを DataSet に読み込みます。

Overloads Public Function ReadXml( _
   ByVal stream As Stream _) As XmlReadMode
[C#]
public XmlReadMode ReadXml(Streamstream);
[C++]
public: XmlReadMode ReadXml(Stream* stream);
[JScript]
public function ReadXml(
   stream : Stream) : XmlReadMode;

パラメータ

  • stream
    Stream から派生するオブジェクト。

戻り値

データを読み込むために使用する XmlReadMode

解説

ReadXml メソッドを使用すると、XML ドキュメントから DataSet に、データだけ、またはデータとスキーマの両方を読み込むことができます。これに対して ReadXmlSchema メソッドは、スキーマだけを読み込みます。データとスキーマの両方を読み取るには、 XmlReadMode パラメータを含む ReadXML オーバーロードの 1 つを使用し、その値を ReadSchema に設定します。

WriteXml メソッドと WriteXmlSchema メソッドについても、それぞれ同様です。XML データ、またはスキーマとデータの両方を DataSet から書き込むには、 WriteXml メソッドを使用します。スキーマだけを書き込むには、 WriteXmlSchema メソッドを使用します。

インライン スキーマを指定した場合、そのインライン スキーマはデータを読み込む前に既存のリレーショナル構造を拡張するために使用されます。競合が存在する場合は (たとえば、異なるデータ型で定義された同じテーブルの同じ列)、例外が発生します。

インライン スキーマを指定しない場合、XML ドキュメントの構造に従い、必要に応じて、リレーショナル構造は推論によって拡張されます。すべてのデータを公開するために、推論によってスキーマを拡張できない場合は、例外が発生します。

DataSet の XSD スキーマに targetNamespace が含まれている場合、データを読み取ることができない可能性があります。また、 ReadXml を呼び出して、名前空間の限定がない要素を含む XML で DataSet を読み込むと、例外が発生する可能性があります。限定されていない要素を読み取るには、次の例のように、XSD スキーマで 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 のスキーマに、同じ名前空間で名前が同じであるが型が違う要素が含まれている場合、 XmlReadMode.ReadSchema を指定してスキーマを ReadXmlDataSet に読み込もうとすると、例外がスローされます。この例外は、.NET Framework Version 1.0 を使用している場合は発生しません。

使用例

[Visual Basic, C#, C++] 初めに 1 つの DataTable 、2 列、および 10 行で単純な DataSet を作成する例を次に示します。 DataSet のスキーマとデータは、 WriteXml メソッドの呼び出しによってディスクに書き込みます。2 番目の DataSet を作成し、 ReadXml メソッドを使用して、スキーマとデータを格納します。

 
Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("myDataSet")
    Dim myTable As New DataTable("myTable")
    Dim c1 As New DataColumn("id", Type.GetType("System.Int32"))
    c1.AutoIncrement = True
    Dim c2 As New DataColumn("item")
    myTable.Columns.Add(c1)
    myTable.Columns.Add(c2)
    OriginalDataSet.Tables.Add(myTable)
    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = myTable.NewRow()
        newRow("item") = "item " + i.ToString()
        myTable.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 = "myXmlDocument.xml"
    Dim fsWriteXml As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)
    ' Use WriteXml to write the XML document.
    OriginalDataSet.WriteXml(fsWriteXml)
    ' 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)
     
    newDataSet.ReadXml(fsReadXml)
    ' Print out values of each table in the DataSet using the 
    ' function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
   
   
Private Sub PrintValues(ds As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim t As DataTable
    Dim r As DataRow
    Dim c As DataColumn
    For Each t In  ds.Tables
        Console.WriteLine("TableName: " + t.TableName)         
        For Each r In  t.Rows             
            For Each c In  t.Columns
                Console.Write(ControlChars.Tab + " " + r(c).ToString())
            Next c
            Console.WriteLine()
        Next r
    Next t
End Sub

[C#] 
private void DemonstrateReadWriteXMLDocumentWithFileStream(){
   // Create a DataSet with one table and two columns.
   DataSet OriginalDataSet = new DataSet("myDataSet");
   DataTable myTable = new DataTable("myTable");
   DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"));
   c1.AutoIncrement= true;
   DataColumn c2 = new DataColumn("item");
   myTable.Columns.Add(c1);
   myTable.Columns.Add(c2);
   OriginalDataSet.Tables.Add(myTable);
   // Add ten rows.
   DataRow newRow;
   for(int i = 0; i < 10; i++){
      newRow = myTable.NewRow();
      newRow["item"]= "item " + i;
      myTable.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 = "myXmlDocument.xml";
   System.IO.FileStream fsWriteXml = new System.IO.FileStream
      (xmlFilename, System.IO.FileMode.Create);
   // Use WriteXml to write the XML document.
   OriginalDataSet.WriteXml(fsWriteXml);
   // 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);
   
   newDataSet.ReadXml(fsReadXml);
   // Print out values of each table in the DataSet using the 
   // function defined below.
   PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet ds, string label){
   Console.WriteLine("\n" + label);
   foreach(DataTable t in ds.Tables){
      Console.WriteLine("TableName: " + t.TableName);
      foreach(DataRow r in t.Rows){
         foreach(DataColumn c in t.Columns){
            Console.Write("\t " + r[c] );
         }
         Console.WriteLine();
      }
   }
}

[C++] 
private:
 void DemonstrateReadWriteXMLDocumentWithFileStream(){
    // Create a DataSet with one table and two columns.
    DataSet* OriginalDataSet = new DataSet(S"myDataSet");
    DataTable* myTable = new DataTable(S"myTable");
    DataColumn* c1 = new DataColumn(S"id", Type::GetType(S"System.Int32"));
    c1->AutoIncrement= true;
    DataColumn* c2 = new DataColumn(S"item");
    myTable->Columns->Add(c1);
    myTable->Columns->Add(c2);
    OriginalDataSet->Tables->Add(myTable);
    // Add ten rows.
    DataRow* newRow;
    for(int i = 0; i < 10; i++){
       newRow = myTable->NewRow();
       newRow->Item[S"item"]= String::Format( S"item {0}", __box(i));
       myTable->Rows->Add(newRow);
    }
    OriginalDataSet->AcceptChanges();
    // Print out values of each table in the DataSet using the 
    // function defined below.
    PrintValues(OriginalDataSet, S"Original DataSet");
    // Write the schema and data to XML file with FileStream.
    String* xmlFilename = S"myXmlDocument.xml";
    System::IO::FileStream* fsWriteXml = new System::IO::FileStream
       (xmlFilename, System::IO::FileMode::Create);
    // Use WriteXml to write the XML document.
    OriginalDataSet->WriteXml(fsWriteXml);
    // Close the FileStream.
    fsWriteXml->Close();
       
    // Dispose of the original DataSet.
    OriginalDataSet->Dispose();
    // Create a new DataSet.
    DataSet* newDataSet = new DataSet(S"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);
    
    newDataSet->ReadXml(fsReadXml);
    // Print out values of each table in the DataSet using the 
    // function defined below.
    PrintValues(newDataSet,S"New DataSet");
 }
 
 void PrintValues(DataSet* ds, String* label){
    Console::WriteLine(S"\n{0}", label);
    System::Collections::IEnumerator* myEnum = ds->Tables->GetEnumerator();
    while (myEnum->MoveNext())
    {
       DataTable* t = __try_cast<DataTable*>(myEnum->Current);
       Console::WriteLine(S"TableName: {0}", t->TableName);
       System::Collections::IEnumerator* myEnum1 = t->Rows->GetEnumerator();
       while (myEnum1->MoveNext())
       {
          DataRow* r = __try_cast<DataRow*>(myEnum1->Current);
          System::Collections::IEnumerator* myEnum2 = t->Columns->GetEnumerator();
          while (myEnum2->MoveNext())
          {
             DataColumn* c = __try_cast<DataColumn*>(myEnum2->Current);
             Console::Write(S"\t {0}", r->Item[c] );
          }
          Console::WriteLine();
       }
    }
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

DataSet クラス | DataSet メンバ | System.Data 名前空間 | DataSet.ReadXml オーバーロードの一覧 | ReadXmlSchema | WriteXml | WriteXmlSchema