Update: Die DataSet.WriteXML-Methode gibt einen Dezimalwert als wissenschaftliche Notation und verursacht eine Ausnahme System.FormatException in nachfolgenden Aufrufen von DataSet.ReadXML-Methode

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 321542 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie ein XML-Dokument, die ein Attribut oder ein Element mit einem dezimalen Wert z. B. 0,00001 enthält verwenden, markiert das Schema, Attribut oder Element als eine Dezimalzahl. Wenn Sie die DataSet.ReadXML -Methode, verwenden um eine XML-Datei zu lesen und Sie dann die DataSet.WriteXML -Methode verwenden, um den Wert wieder auf die XML-Datei zu schreiben, enthält die Ausgabe einen Wert in der wissenschaftlichen Schreibweise. Wenn Sie die DataSet.ReadXML -Methode erneut verwenden, wird sinngemäß die folgende Ausnahme Fehlermeldung:
System.FormatException - wies Eingabezeichenfolge keinem gültigen Format.

Ursache

Die DataSet.WriteXML -Methode ruft intern die Decimal.ToString -Methode, wenn Sie Dezimalzahlen schreibt. Die Decimal.ToString -Methode schreibt dezimale Zahlen wie 0,00001 in wissenschaftlicher Notation. Sie können die NumberStyles -Enumeration für das DataSet -Objekt zu für wissenschaftliche Notation als Dezimalwert gelesen werden nicht festlegen. Daher bei Verwendung die DataSet.ReadXML -Methode zum Lesen wieder die Anzahl in einer Datengruppe eine FormatException -Ausnahme auftritt.

Lösung

Ein Hotfix zur Behebung dieses Problems ist inzwischen bei Microsoft erhältlich; dieser Hotfix wurde jedoch ausschließlich zur Behebung des in diesem Artikel beschriebenen Problems entwickelt. Deshalb sollten Sie nur Systeme aktualisieren, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird unter Umständen zu einem späteren Zeitpunkt weiteren Tests unterzogen. Wenn Sie durch dieses Problem nicht schwerwiegend betroffen sind, empfiehlt Microsoft daher, auf das nächste Servicepack warten, das diesen Hotfix enthält wird.

Wenn Sie das Problem sofort beheben möchten, wenden Sie sich an Microsoft Product Support Services, um den Hotfix zu erhalten. Eine vollständige Liste mit Telefonnummern der Microsoft-Produktsupport und Informationen Supportkosten der folgenden Microsoft-Website:
http://support.microsoft.com/contactus/?ws=support
Hinweis: PLEASE DO NOT TRANSLATE and DELETE THIS PASSAGE. IT DOES NOT APPLY TO GERMANY.Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time () angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Abhilfe

Sie können den Wert als Zeichenfolge statt als Dezimalzahl in das Schema markieren, und Sie können die Zeichenfolge in eine Dezimalzahl manuell mithilfe der Decimal.Parse -Methode mit dem Flag AllowExponent NumberStyles konvertieren.

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Diese Methode verwendet ein DataSet -Objekt zu lesen, schreiben und einen decimal-Wert aus einer XML gelesen werden-Dokument:
  1. Erstellen Sie eine neue Microsoft Visual c#-Konsolenanwendung.
    1. Starten Sie Microsoft Visual Studio .NET.
    2. Zeigen im Menü Datei auf neu , und klicken Sie dann auf Projekt .
    3. Klicken Sie unter Projekttypen auf Visual C#-Projekte und klicken Sie dann unter Vorlagen auf Konsolenanwendung . Standardmäßig wird eine Klasse mit der Bezeichnung Class1 erstellt.
  2. Fügen Sie folgende using-Anweisung am Anfang der Datei Class1.cs:
    using System.Data;
    using System.Xml; 
    
  3. Fügen Sie in das Feld Main Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, zeigen Sie auf Hinzufügen und klicken Sie dann auf Neues Element hinzufügen . Das Dialogfeld Neues Element hinzufügen wird angezeigt.
  5. Klicken Sie unter Vorlagen auf XML-Schema , und klicken Sie dann auf Öffnen . Standardmäßig ist die XMLSchema1 erstellt.
  6. Wechseln Sie zu der XML-Feld, und Ersetzen Sie die beiden durch den folgenden Code:
    <?xml version="1.0" standalone="yes"?>
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      <xs:element name="NewDataSet" msdata:IsDataSet="true">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:element name="Table">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="name" type="xs:string" minOccurs="0" />
                  <xs:element name="tax" type="xs:decimal" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    
  7. Wiederholen Sie die Schritt 4, klicken Sie unter Vorlagen auf XML-Datei , und klicken Sie dann auf Öffnen . Standardmäßig ist XMLFile1 erstellt.
  8. Ersetzen Sie den Code durch folgenden Code:
    <?xml version="1.0" standalone="yes" ?>
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    	<NewDataSet>
    		<Table diffgr:id="Table1" msdata:rowOrder="0">
    			<name>test </name>
    			<tax>0.00001</tax>
    		</Table>
    		<Table diffgr:id="Table2" msdata:rowOrder="1">
    			<name>234</name>
    			<tax>12</tax>
    		</Table>
    	</NewDataSet>
    </diffgr:diffgram>
    
  9. Klicken Sie im Menü Debuggen auf Starten .
Sie erhalten die Fehlermeldung, das im Abschnitt "Problembeschreibung" genannt wird.

Eigenschaften

Artikel-ID: 321542 - Geändert am: Dienstag, 11. Oktober 2005 - Version: 1.6
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.0 Service Pack 1
  • Microsoft .NET Framework 1.0 Service Pack 2
Keywords: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 321542
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com