CORRECTIF : la méthode DataSet.WriteXML génère une valeur décimale notation scientifique et provoque une exception System.FormatException dans les appels de méthode DataSet.ReadXML

Traductions disponibles Traductions disponibles
Numéro d'article: 321542 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque vous utilisez un document XML qui contient un attribut ou un élément avec une valeur décimale comme 0.00001, le schéma marque cet attribut ou un élément comme un nombre décimal. Si vous utilisez la méthode DataSet.ReadXML pour lire un fichier XML et puis vous utilisez la méthode DataSet.WriteXML pour écrire la valeur de retour dans le fichier XML, la sortie contient une valeur dans la notation scientifique. Si vous utilisez la méthode DataSet.ReadXML de nouveau, vous recevez le message d'erreur exception suivante :
System.FormatException - chaîne d'entrée n'a pas dans un format correct.

Cause

La méthode DataSet.WriteXML appelle en interne la méthode Decimal.ToString lorsqu'il écrit des nombres décimaux. La méthode Decimal.ToString écrit nombres décimaux tels que 0.00001 en notation scientifique. Vous ne pouvez pas définir l'énumération NumberStyles pour l'objet DataSet à effectuer pour la notation scientifique être lu en tant que valeur décimale. Par conséquent, lorsque vous utilisez la méthode DataSet.ReadXML pour lire le numéro de sauvegarder en un jeu de données, une exception FormatException se produit.

Résolution

Un correctif est désormais disponible auprès de Microsoft, mais il ne vise qu'à corriger le problème décrit dans cet article. Uniquement l'appliquer à des systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas gravement touché par ce problème, nous vous recommandons d'attendre le prochain service pack contenant ce correctif.

Pour résoudre ce problème immédiatement, contactez services de support technique Microsoft afin d'obtenir le correctif logiciel. Pour une liste complète des numéros de téléphone des services de support technique Microsoft et des informations sur les frais de support technique, reportez-vous au site de Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=support
note Dans certains cas, les frais aucuns de support peuvent être facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes non traités par la mise à jour en question. La version anglaise de ce correctif dispose les attributs de fichier (ou attributs de fichier version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en coordinated universal temps (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'outil Date et heure du Panneau de configuration.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Contournement

Vous pouvez marquer la valeur comme une chaîne au lieu d'en valeurs décimales dans le schéma, et vous pouvez manuellement convertit la chaîne une valeur de nombre décimal en utilisant la méthode Decimal.Parse avec l'indicateur AllowExponent NumberStyles .

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Procédure pour reproduire le problème

Cette méthode utilise un objet DataSet à lire, écrire et lire une valeur décimale à partir de XML document :
  1. Créer une nouvelle application console Visual C# .NET.
    1. Démarrez Microsoft Visual Studio .NET.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
    3. Sous types de projets , cliquez sur projets Visual C# , puis cliquez sur application console sous modèles . Par défaut, une classe qui est nommée Class1 est créée.
  2. Ajoutez la ligne suivante à l'aide instruction au début du fichier Class1.cs :
    using System.Data;
    using System.Xml; 
    
  3. Ajoutez le code suivant au champ principal Class1.cs:
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
    \\XMLFile1.xml") ;
  4. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter et puis cliquez sur Ajouter un nouvel élément . La boîte d'ajouter un nouvel élément s'affiche.
  5. Cliquez sur schéma XML sous modèles , puis cliquez sur Ouvrir . Par défaut, XMLSchema1 est créé.
  6. Basculez vers le champ XML et puis remplacez le codeur par le code suivant :
    <?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. Répétez l'étape 4, cliquez sur fichiers XML sous modèles et puis cliquez sur Ouvrir . Par défaut, XMLFile1 est créé.
  8. Remplacez le code par le code suivant :
    <?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. Dans le menu Déboguer , cliquez sur Démarrer .
Vous recevez le message d'erreur qui est mentionné dans la section « Symptômes ».

Propriétés

Numéro d'article: 321542 - Dernière mise à jour: mardi 11 octobre 2005 - Version: 1.6
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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 Éducation
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.0 Service Pack 1
  • Microsoft .NET Framework 1.0 Service Pack 2
Mots-clés : 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbqfe kbbug kbfix KB321542 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 321542
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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