FIX: Il metodo DataSet.WriteXML restituisce un valore decimale come notazione scientifica e causa un'eccezione System.FormatException nelle successive chiamate al metodo DataSet.ReadXML

Traduzione articoli Traduzione articoli
Identificativo articolo: 321542 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si utilizza un documento XML che contiene un attributo o un elemento con un valore decimale, ad esempio 0,00001, lo schema contrassegna tale attributo o di un elemento come numero decimale. Se si utilizza il metodo DataSet.ReadXML per leggere un file XML e quindi si utilizzare il metodo di DataSet.WriteXML per scrivere il valore del file XML, l'output contiene un valore nella notazione scientifica. Se si utilizza il metodo DataSet.ReadXML nuovamente, è visualizzato il seguente messaggio di errore di eccezione:
System.FormatException - stringa di input non un formato corretto.

Cause

Il metodo DataSet.WriteXML chiama internamente il metodo di Decimal.ToString durante la scrittura di numeri decimali. Il metodo di Decimal.ToString scrive i numeri decimali, ad esempio 0,00001 nella notazione scientifica. Non è possibile impostare l'enumerazione di NumberStyles per l'oggetto DataSet rendere per la notazione scientifica essere letto come un valore decimale. Di conseguenza, quando si utilizza il metodo DataSet.ReadXML per leggere il numero nuovamente in un set di dati, si verifica un'eccezione FormatException .

Risoluzione

Un hotfix supportato è disponibile da Microsoft, tuttavia è destinato esclusivamente per risolvere il problema descritto in questo articolo. Utilizzarla solo nei sistemi in cui si verifica questo problema specifico. Questo aggiornamento rapido (hotfix) potrebbe essere eseguiti ulteriori test. Se non si è notevolmente interessati da questo problema, si consiglia di attendere il prossimo service pack contenente questo aggiornamento rapido (hotfix) per.

Per risolvere immediatamente questo problema, contattare il servizio supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo di numeri di telefono del servizio supporto tecnico clienti Microsoft e per informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota in casi particolari, le spese normalmente addebitate per le chiamate al Servizio Supporto Tecnico Clienti Microsoft potrebbero essere annullate qualora un addetto del Supporto Tecnico Microsoft dovesse determinare che uno specifico aggiornamento risolverà il problema. I normali costi del Servizio Supporto Tecnico Clienti verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.La versione di lingua inglese di questo aggiornamento rapido (hotfix) presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Date e ore per questi file sono indicati nella coordinated universal time (UTC). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello strumento Data e ora del Pannello di controllo.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Workaround

È possibile selezionare il valore come stringa anziché come numero decimale nello schema e si sia possibile convertire la stringa manualmente in un valore numerico decimale utilizzando il metodo Decimal.Parse con il flag AllowExponent NumberStyles .

Status

Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a".

Informazioni

Procedura per riprodurre il problema.

Questo metodo utilizza un oggetto DataSet per leggere, scrivere e per leggere un valore decimale da XML documento:
  1. Creare una nuova applicazione console di Microsoft Visual C#. NET.
    1. Avviare Microsoft Visual Studio .NET.
    2. Scegliere Nuovo dal menu file , quindi progetto .
    3. In Tipi progetto fare clic su Progetti di C# e quindi fare clic su Applicazione Console in modelli . In base all'impostazione predefinita, viene creata una classe denominata Class1.
  2. Aggiungere la seguente istruzione using all'inizio del file Class1.cs:
    using System.Data;
    using System.Xml; 
    
  3. Aggiungere il codice riportato di seguito al campo principale in ds Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome progetto, scegliere Aggiungi , quindi Aggiungi nuovo elemento . Verrà visualizzata la Aggiungi nuovo elemento .
  5. Fare clic su Schema XML in modelli e quindi fare clic su Apri . Per impostazione predefinita, viene creato XMLSchema1.
  6. Passare al campo XML e quindi sostituire il programmatore con il codice riportato di seguito:
    <?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. Ripetere il passaggio 4, fare clic su File XML in modelli e quindi fare clic su Apri . Per impostazione predefinita, viene creato XMLFile1.
  8. Sostituire il codice con il codice riportato di seguito:
    <?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. Nel menu debug , fare clic su Start .
È visualizzato il messaggio di errore menzionato nella sezione "Sintomi".

Proprietà

Identificativo articolo: 321542 - Ultima modifica: martedì 11 ottobre 2005 - Revisione: 1.6
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 321542
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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