CORRECÇÃO: O método DataSet.WriteXML exibe um valor decimal como notação científica e causa uma exceção System.FormatException em chamadas de método DataSet.ReadXML subseqüentes

Traduções deste artigo Traduções deste artigo
ID do artigo: 321542 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você usa um documento XML que contém um atributo ou um elemento com um valor decimal, como 0,00001, o esquema marca esse atributo ou elemento como um decimal. Se você usar o método DataSet.ReadXML para ler um arquivo XML e, em seguida, use o método DataSet.WriteXML para gravar o valor novamente o arquivo XML, o resultado contém um valor em notação científica. Se você usar o método DataSet.ReadXML novamente, você receber a seguinte mensagem de erro exceção:
System.FormatException - seqüência de caracteres de entrada não estava em um formato correto.

Causa

O método DataSet.WriteXML internamente chama o método Decimal.ToString quando ele grava números decimais. O método Decimal.ToString grava números decimais como 0,00001 em notação científica. Não é possível definir a enumeração NumberStyles para o objeto DataSet fazer para notação científica ser lido como um valor decimal. Portanto, quando você usa o método DataSet.ReadXML para ler o número novamente em um conjunto de dados, uma exceção FormatException ocorre.

Resolução

Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo service pack que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de telefones do Atendimento Microsoft e informações sobre os custos de suporte da, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Como Contornar

Você pode marcar o valor como uma seqüência em vez de como um decimal no esquema e você pode converter manualmente a seqüência de caracteres em um valor de número decimal usando o método decimal.Parse com o sinalizador AllowExponent NumberStyles .

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Etapas para reproduzir o comportamento

Esse método usa um objeto DataSet para ler, gravar e ler um valor decimal de um XML documento:
  1. Crie um novo aplicativo console Microsoft Visual translation from VPE for Csharp .NET.
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
    3. Em Project Types , clique em projetos translation from VPE for Csharp Visual e, em seguida, clique em Aplicativo de console em modelos . Por padrão, uma classe que é denominada Class1 é criada.
  2. Adicione o seguinte usando a instrução no início do arquivo Class1.cs:
    using System.Data;
    using System.Xml; 
    
  3. Adicione o código a seguir ao campo principal na Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. No Solution Explorer, clique com o botão direito do mouse o nome do projeto, aponte para Add e, em seguida, clique em Add New Item . A caixa Add New Item aparece.
  5. Clique em Esquema XML em modelos e em seguida, clique em Abrir . Por padrão, XMLSchema1 é criado.
  6. Alterne para o campo XML e depois substituir o codificador com o código a seguir:
    <?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. Repita a etapa 4, clique em Arquivo XML em modelos e, em seguida, clique em Abrir . Por padrão, XMLFile1 é criado.
  8. Substitua o código com o código a seguir:
    <?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. No menu Debug , clique em Iniciar .
Você receber a mensagem de erro mencionada na seção "Sintomas".

Propriedades

ID do artigo: 321542 - Última revisão: terça-feira, 11 de outubro de 2005 - Revisão: 1.6
A informação contida neste artigo aplica-se 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
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 321542

Submeter comentários

 

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