Исправление: Метод DataSet.WriteXML выводит десятичного значения как экспоненциальное представление чисел и вызывает исключение System.FormatException при последующих вызовах метода DataSet.ReadXML

Переводы статьи Переводы статьи
Код статьи: 321542 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При использовании XML-документ, содержащий атрибут или элемент с десятичным значением, такие как 0.00001 схемы помечается как десятичные точки, атрибута или элемента. При использованииDataSet.ReadXMLметод для чтения XML-файл, а затем использоватьDataSet.WriteXMLметод, чтобы записать значение в XML-файл выходных данных содержит значения в экспоненциальном представлении. При использованииDataSet.ReadXMLметод, появляется следующее сообщение об исключении:
System.FormatException - ввода строка имела неверный формат.

Причина

надписьюDataSet.WriteXMLвнутренне вызывает методDecimal.ToStringметод, когда он записывает десятичное число. надписьюDecimal.ToStringметод записывает десятичные числа, такие как 0.00001 в экспоненциальном представлении. Не удается установитьNumberStylesПеречисление дляНабор данныхчтение как десятичное значение объекта, чтобы сделать для экспоненциальной нотации. Таким образом, при использованииDataSet.ReadXMLметод, чтобы прочитать номер обратно в набор данныхFormatExceptionисключение.

Решение

Корпорация Майкрософт выпустила специальное исправление, предназначенное для устранения этой проблемы.. Это исправление необходимо применять только в тех системах, где наблюдается данная проблема.. Исправление может подвергаться дополнительному тестированию.. В связи с этим корпорация Майкрософт рекомендует по возможности отложить решение этой проблемы до выхода следующего пакета обновления, содержащего это исправление..

Чтобы получить данное исправление и решить проблему немедленно, обратитесь в службу технической поддержки Майкрософт.. Полный список телефонов службы поддержки корпорации Майкрософт, а также сведения об условиях обслуживания см. на веб-узле Майкрософт по следующему адресу::
http://support.microsoft.com/contactus/?ws=support
Примечание.В отдельных случаях, если специалистом службы технической поддержки Майкрософт будет определено, что решением проблемы является специально выпущенное исправление, оплата, предусмотренная за обращение в службы технической поддержки, может быть отменена.. Дополнительные услуги по технической поддержке, не связанные с данным исправлением, оплачиваются на стандартных условиях..Английская версия исправления содержит версии файлов, приведенные в следующей таблице (или более поздние).. Дата и время для файлов указаны во всеобщем скоординированном времени (UTC).. При просмотре сведений о файле, время изменяется на местное.. Чтобы узнать разницу между временем по Гринвичу и местным временем,Часовой поясвкладки в окне «Дата и время» панели управления.
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

Временное решение

Значение можно пометить как строку вместо того, как десятичное число в схеме, а также можно вручную преобразовать строку в десятичное значение номера с помощьюDecimal.Parseметод сAllowExponent NumberStylesФлаг.

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Майкрософт, перечисленных в разделе «Применяется к»..

Дополнительная информация

Действия по воспроизведению поведения

Этот метод используетНабор данныхобъект для чтения, записи и чтения десятичное значение из XML документа.
  1. Создайте новое консольное приложение Microsoft Visual C# .NET.
    1. Запустите Microsoft Visual Studio .NET..
    2. в менюФайл:Выберите пункт менюСОЗДАТЬ.и выберите командуProject.
    3. Из спискаТипы проектовзатем –Проекты Visual C#и выберите командуКонсольного приложенияИз спискаШаблоны:. По умолчанию создается класс с именем Class1.
  2. Добавьте следующий код в начало файла Class1.CS инструкцией:
    using System.Data;
    using System.Xml; 
    
  3. Добавьте следующий код вОсновной номер:поле в класс Class1.cs.
    DataSet ds = new DataSet();
    ds.ReadXmlSchema("..\\..\\XMLSchema1.xsd");
    ds.ReadXml("..\\..\\XMLFile1.xml");
    ds.WriteXml("..\\..\\XMLFile1.xml");		
    ds.ReadXml("..\\..\\XMLFile1.xml");
    
  4. В обозревателе решений щелкните правой кнопкой мыши имя проекта, выберите пунктДобавьте сервери выберите командуДобавление нового элемента. надписьюДобавление нового элементаПоявится окно.
  5. затем –XML-схемыИз спискаШаблоны:и выберите командуOPEN. По умолчанию создается XMLSchema1.
  6. Перейдите в поле XML и затем замените программистом следующий код:
    <?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. Повторите шаг 4, нажмите кнопкуXML-файлИз спискаШаблоны:и выберите командуOPEN. По умолчанию создается XMLFile1.
  8. Замените код следующим кодом:
    <?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. в менюОтладкавыберите пунктSTART ::.
Появится сообщение об ошибке, указанное в разделе «Проблема»..

Свойства

Код статьи: 321542 - Последний отзыв: 24 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • 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
Ключевые слова: 
kbhotfixserver kbqfe kbvs2002sp1sweep kbprogramming kbschema kbxml kbbug kbfix kbmt KB321542 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:321542

Отправить отзыв

 

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