REVISIÓN: El método DataSet.WriteXML genera un valor decimal como notación científica y produce una excepción System.FormatException en las subsiguientes llamadas de método DataSet.ReadXml

Seleccione idioma Seleccione idioma
Id. de artículo: 321542 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se utiliza un documento XML que contiene un atributo o un elemento con un valor decimal como obtenido tenga una exactitud de 0,00001, el esquema marca ese atributo o elemento como un decimal. Si usa el método DataSet.ReadXML para leer un archivo XML y, a continuación, utiliza el método DataSet.WriteXML volver a escribir el valor en el archivo XML, el resultado contiene un valor en la notación científica. Si utiliza el método DataSet.ReadXML nuevo, recibirá el mensaje de error de excepción siguiente:
System.FormatException - cadena de entrada no estaba en un formato correcto.

Causa

El método DataSet.WriteXML llama internamente al método Decimal.ToString cuando escribe números decimales. El método Decimal.ToString escribe números decimales como, por ejemplo, obtenido tenga una exactitud de 0,00001 en notación científica. No se puede establecer la enumeración NumberStyles para el objeto DataSet que para la notación científica se lea como un valor decimal. Por lo tanto, cuando se utiliza el método DataSet.ReadXML para leer el número nuevo en un conjunto de datos, se produce una excepción FormatException .

Solución

Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por tanto, si no se ve muy afectado por este problema, se recomienda que espere al próximo Service Pack que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y horas de estos archivos aparecen en la hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Solución

Puede marcar el valor como una cadena en lugar de como un decimal en el esquema y manualmente puede convertir la cadena en un valor de número decimal mediante el método decimal.Parse con el indicador de AllowExponent NumberStyles .

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Pasos para reproducir el comportamiento

Este método utiliza un objeto DataSet para leer, escribir y leer un valor decimal de un XML documento:
  1. Cree una nueva aplicación de consola de Microsoft Visual C#. NET.
    1. Inicie Microsoft Visual Studio NET..
    2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
    3. En Tipos de proyecto , haga clic en Proyectos de Visual C# y, a continuación, haga clic en Aplicación de consola , bajo plantillas . De forma predeterminada, se crea una clase denominada Class1.
  2. Agregue la siguiente instrucción using al principio del archivo Class1.cs:
    using System.Data;
    using System.Xml; 
    
  3. Agregar el código siguiente al campo principal en Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento . Aparecerá el cuadro Agregar nuevo elemento .
  5. Haga clic en Esquema XML en plantillas y, a continuación, haga clic en Abrir . De forma predeterminada, se crea XMLSchema1.
  6. Cambie a campo XML y, a continuación, reemplace el codificador con el siguiente código:
    <?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 el paso 4, haga clic en Archivo XML en plantillas y, a continuación, haga clic en Abrir . De forma predeterminada, se crea XMLFile1.
  8. Reemplace el código con el siguiente código:
    <?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. En el menú Depurar , haga clic en iniciar .
Recibirá el mensaje de error que se menciona en la sección "Síntomas".

Propiedades

Id. de artículo: 321542 - Última revisión: martes, 11 de octubre de 2005 - Versión: 1.6
La información de este artículo se refiere a:
  • Microsoft Visual Studio .NET 2002 Professional
  • 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
Palabras clave: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 321542

Enviar comentarios

 

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