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

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB: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 サイトを参照してください: メモ 特殊な場合は、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. [ デバッグ ] の [ 開始 ] をクリックします。
「現象」に記載されているエラー メッセージ表示されます。
Decimal.ToString XML .NET DataSet NumberStyles AllowExponent

警告: この記事は自動翻訳されています

プロパティ

文書番号:321542 - 最終更新日: 12/07/2015 10:43:34 - リビジョン: 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

  • kbnosurvey kbarchive kbbug kbfix kbqfe kbschema kbprogramming kbxml kbvs2002sp1sweep kbhotfixserver kbmt KB321542 KbMtja
フィードバック