Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo DataSet.ReadXml (XmlReader)

 

Data di pubblicazione: ottobre 2016

Legge i dati in XML schema e il DataSet utilizzando l'oggetto specificato System.Xml.XmlReader.

Spazio dei nomi:   System.Data
Assembly:  System.Data (in System.Data.dll)

public XmlReadMode ReadXml(
	XmlReader reader
)

Parametri

reader
Type: System.Xml.XmlReader

Il XmlReader da cui leggere.

Valore restituito

Type: System.Data.XmlReadMode

Il XmlReadMode utilizzato per leggere i dati.

Il ReadXml metodo fornisce un modo per leggere solo i dati o dati e schema in un DataSet da un documento XML, mentre il ReadXmlSchema metodo legge solo lo schema. Per leggere i dati e schema, utilizzare uno del ReadXML overload che include il mode parametro e impostarne il valore ReadSchema.

Si noti che lo stesso vale per il WriteXml e WriteXmlSchema metodi, rispettivamente. Per scrivere i dati XML oppure lo schema e dati dal DataSet, utilizzare il WriteXml metodo. Per scrivere solo lo schema, utilizzare il WriteXmlSchema metodo.

System_CAPS_noteNota

Un InvalidOperationException Se in un tipo di colonna, verrà generata la DataRow da cui leggere o scrivere implementa IDynamicMetaObjectProvider e non implementa IXmlSerializable.

Se viene specificato uno schema inline, lo schema inline viene utilizzato per estendere la struttura relazionale esistente prima di caricare i dati. Se sono presenti conflitti (ad esempio, la stessa colonna nella stessa tabella definita con diversi tipi di dati) viene generata un'eccezione.

Se viene specificato alcuno schema inline, la struttura relazionale viene esteso tramite inferenza, se necessario, in base alla struttura del documento XML. Se lo schema non può essere esteso tramite inferenza per esporre tutti i dati, viene generata un'eccezione.

System_CAPS_noteNota

Il DataSet non associa un elemento XML con il corrispondente DataColumn o DataTable caratteri XML validi come ("_") quando vengono sottoposti a escape nel XML serializzato. Il DataSet solo effettua l'escape di caratteri XML non validi nei nomi degli elementi XML e pertanto può utilizzare solo lo stesso. Quando vengono sottoposti a escape caratteri validi nel nome dell'elemento XML, l'elemento viene ignorato durante l'elaborazione.

Se lo Schema XML per un DataSet include un targetNamespace, dati non vengano letti e che vengano generate eccezioni quando si chiama ReadXml per caricare il DataSet con XML contenente elementi senza nessuno spazio dei nomi valide. Per leggere elementi non qualificati, impostare elementFormDefault uguale a "qualified" nello Schema XML come illustrato nell'esempio seguente.

<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 eredita da XmlReader.

System_CAPS_noteNota

Se lo schema per il DataSet contiene gli elementi con lo stesso nome ma con tipo diverso, nello stesso spazio dei nomi, viene generata un'eccezione quando si tenta di leggere lo schema nel DataSet con ReadXml specificando XmlReadMode.ReadSchema. Questa eccezione non si verifica se si utilizza .NET Framework versione 1.0.

Nell'esempio seguente viene creata una semplice DataSet con uno DataTable, due colonne e dieci righe. Il DataSet schema e i dati vengono scritti su disco richiamando il WriteXml metodo. Un secondo DataSet viene creato e ReadXml metodo viene utilizzato per compilarlo con schema e dati.

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();
        }
    }
}

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: