[FIX DataSet.WriteXML メソッドは、数値を指数表記として 10 進値を出力し、以降の DataSet.ReadXML メソッドの呼び出しでの System.FormatException 例外の原因

文書翻訳 文書翻訳
文書番号: 321542 - 対象製品
すべて展開する | すべて折りたたむ

目次

現象

属性または 0.00001 のような 10 進値を持つ要素を含む、XML ドキュメントを使用して場合、スキーマは、10 進数としてその属性または要素を示します。 XML ファイルを読み取れません DataSet.ReadXML メソッドを使用する XML ファイルに戻り値の書き込み、 DataSet.WriteXML メソッドを使用し場合、数値を指数表記で値が格納、出力されます。 DataSet.ReadXML メソッドを再度使用する場合は、次の例外のエラー メッセージが表示されます。
System.FormatException - 入力文字列が正しい形式でありません。

原因

DataSet.WriteXML メソッドは 10 進数を書き込むときに、 Decimal.ToString メソッドを内部で呼び出します。 Decimal.ToString メソッドは、科学的表記法で 0.00001 のような 10 進数を書き込みます。 指数表記を 10 進値として読み取られるの DataSet オブジェクトの NumberStyles 列挙型を設定することはできません。 したがってを読み取れません DataSet.ReadXML メソッドを使用するとき数に戻します、データ セットを FormatException 例外が発生します。

解決方法

サポートされている修正プログラムしますです、はのみことを目的としていますこの資料に記載されている問題を解決します。 修正プログラムは、問題が発生したシステムにのみ適用してください。 この修正プログラム テストを受ける可能性があります。 そのため場合この問題で深刻な影響を受けていないお勧めしますこの修正プログラムを含む次の Service Pack まで待つことです。

この問題を解決するには、Microsoft Product Support Services にお問い合わせのうえ、修正プログラムを入手してください。 Microsoft Product Support Services の電話番号一覧およびサポート料金については、次のマイクロソフト Web サイトを参照してください:
http://support.microsoft.com/contactus/?ws=support
メモ 特殊な場合は、Microsoft Support 担当者により、特定の更新は問題が解決される場合料金がサポート通常発生する可能性があります取り消されます。 通常のサポート料金が追加の質問および問題の特定のアップデートの対象とならない問題について適用されます。英語版のこの修正プログラムにファイルの属性 (またはそれ以降のファイル属性) 次の表は、されている可能性もします。 これらのファイルの日時に協定時刻 (UTC) 記載します。 各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。 UTC および現地時間の時差を確認するには、コントロール パネル]、日付と時刻ツールの [ タイム ゾーン ] タブを使用してください。
   Date         Time   Version       Size       File name
   -----------------------------------------------------------
   03-May-2002  02:17  1.0.3705.271  1,294,336  System.xml.dll   

回避策

値は、スキーマで小数点としてではなく文字列としてマークできますしてすることができます手動で、文字列に変換を 10 進数の数値、 AllowExponent NumberStyles フラグと共に、 Decimal.Parse メソッドを使用しています。

状況

マイクロソフトとして認識していますこの問題を記載されているいるマイクロソフト製品の問題。

詳細

動作を再現する手順

は使用このメソッドして DataSet オブジェクトを読み取る、書き込む、XML から 10 進値を読み取るドキュメント。
  1. 新しい Microsoft Visual C# .NET コンソール アプリケーションを作成します。
    1. Microsoft Visual Studio .NET を開始します。
    2. [ ファイル ] メニューの [ 新規作成 ] をポイントし、[ プロジェクト ] をクリックします。
    3. [ プロジェクトの種類 ] で [ Visual C# プロジェクト ] をクリックし、 コンソール アプリケーション [ テンプレート ] ボックスの一覧の [。 既定では、クラス Class1 という名前を作成します。
  2. 次の追加、Class1.cs ファイルの先頭に using ステートメント:
    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 スキーマ ] をクリックし、 ファイルを開く 。 既定では、XMLSchema1 が作成されます。
  6. [XML] </a0> フィールドに切り替えてし、コーダ次のコードに置き換えます:
    <?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 ファイル をクリックして [ 開く ] をクリックします。 既定では、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. [ デバッグ ] の [ 開始 ] をクリックします。
「現象」に記載されているエラー メッセージ表示されます。

プロパティ

文書番号: 321542 - 最終更新日: 2005年10月11日 - リビジョン: 1.6
この資料は以下の製品について記述したものです。
  • 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
キーワード:?
kbbug kbfix kbqfe kbschema kbprogramming kbxml kbvs2002sp1sweep kbhotfixserver kbmt KB321542 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:321542
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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