Oprava: Tato metoda Metoda DataSet.WriteXML výstup Desítková hodnota jako vědecká notace a způsobí výjimku System.FormatException v následných voláních DataSet.ReadXML metoda

Překlady článku Překlady článku
ID článku: 321542 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při použití dokument XML obsahuje atribut nebo element s desetinnou hodnotu například 0.00001 schématu označí, že atribut nebo element jako desetinné číslo. Pokud použijete metodu voláních číst soubor XML a potom pomocí metody Metoda DataSet.WriteXML zapisovat hodnoty zpět do souboru XML, výstup obsahuje hodnotu v matematický zápis. Pokud použijete metodu voláních znovu, zobrazí se následující chybová zpráva Výjimka:
System.FormatException - vstupní řetězec nemá správný formát.

Příčina

Metoda DataSet.WriteXML metoda interně volá metodu Decimal.ToString při zapíše desetinná čísla. Metoda Decimal.ToString zapíše například 0.00001 desetinná čísla v matematickém zápisu. Výčet NumberStyles objekt DataSet, aby pro matematický zápis číst jako desítkovou hodnotu nelze nastavit. Proto při použití metody voláních číst číslo zpět do sady dat dojde k výjimce FormatException.

Řešení

Společnost Microsoft má nyní k dispozici podporovanou opravu hotfix, která je určena pouze k odstranění problému popsaného v tomto článku. Použijte ji pouze v systémech, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Pokud vás tedy uvedené potíže příliš neobtěžují, doporučujeme, abyste počkali na další aktualizaci Service Pack, která bude novou opravu hotfix obsahovat.

Potřebujete-li odstranit tento problém okamžitě, obraťte se na služby podpory společnosti Microsoft, kde můžete tuto opravu hotfix získat. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách technické podpory naleznete na tomto webu společnosti Microsoft:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Poplatky, které je třeba obvykle zaplatit za telefonní hovory, mohou být stornovány, jestliže pracovník technické podpory společnosti Microsoft zjistí, že oznámený problém lze vyřešit konkrétní aktualizací. Další dotazy a žádosti o odbornou pomoc, které se netýkají této zvláštní opravy, podléhají běžným sazbám za poskytnutí odborné pomoci.Anglická verze této opravy hotfix má následující (nebo pozdější) atributy souborů. Data a časy jednotlivých souborů jsou uvedeny ve formátu UTC (Coordinated Universal Time). Pokud zobrazíte informace o souboru, bude převedena na místní čas. Rozdíl mezi místním ČASEM a najít, použijte kartu časové pásmo v ovládacím panelu Datum a čas.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Jak potíže obejít

Hodnotu můžete označit jako řetězec namísto jako desetinné ve schématu a řetězec Desítková hodnota čísla můžete převést ručně pomocí metody Decimal.Parse s příznakem AllowExponent NumberStyles.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Kroky pro reprodukci tohoto chování

Tato metoda používá objekt DataSet, číst, zapisovat a číst Desítková hodnota z XML dokumentu:
  1. Vytvoření nové konzoly aplikace Microsoft Visual C# .NET.
    1. Spusťte aplikaci Visual Studio .NET.
    2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt.
    3. V části Typy projektu klepněte na položku Visual C# projekty a klepněte na tlačítko Aplikace konzoly v části šablony. Ve výchozím nastavení je vytvořen třídy s názvem Class1.
  2. Přidejte následující pomocí příkazu na začátku souboru Class1.cs:
    using System.Data;
    using System.Xml; 
    
  3. Přidejte následující kód v poli hlavní v Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. V aplikaci Solution Explorer klepněte pravým tlačítkem myši na název projektu, přejděte na příkaz Přidat a potom klepněte na možnost Přidat novou položku. Zobrazí pole Přidat novou položku.
  5. V části šablony klepněte na Schéma a potom klepněte na tlačítko Otevřít. Ve výchozím nastavení je vytvořen XMLSchema1.
  6. Přepněte do pole XML a kodér nahraďte následující kód:
    <?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. Opakujte krok 4 v části šablony klepněte na Soubor XML a potom klepněte na tlačítko Otevřít. Ve výchozím nastavení je vytvořen XMLFile1.
  8. Nahradit kód následující kód:
    <?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. V nabídce Debug klepněte na tlačítko Start.
Zobrazí se chybová zpráva uvedená v části Příznaky.

Vlastnosti

ID článku: 321542 - Poslední aktualizace: 11. října 2005 - Revize: 1.6
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:321542

Dejte nám zpětnou vazbu

 

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