4

XSD ファイルを指定すると、次のようなコードは、返された DataSet の両方の DataTable に余分な (不要な) 列を生成します。

ds.ReadXmlSchema(s);

どちらの DataTable にも Order_Id 列があります。他の列は XSD と完全に一致します。

他の誰かがこれを見たことがありますか?

以下の XSD ファイル:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType msdata:AutoIncrement="false">
            <xs:attribute name="itemId" type="xs:unsignedInt" />
            <xs:attribute name="stockCode" type="xs:string" />
            <xs:attribute name="stockCodeType" type="xs:string" />
            <xs:attribute name="Quantity" type="xs:unsignedLong" />
            <xs:attribute name="ProductIdX" type="xs:unsignedInt" />
            <xs:attribute name="legalEntity" type="xs:string" />
            <xs:attribute name="countryOfIssue" type="xs:string" />
            <xs:attribute name="branchSystem" type="xs:string" />
            <xs:attribute name="accountId" type="xs:string" />
            <xs:attribute name="settlementDate" type="xs:string" />
            <xs:attribute name="tradeDate" type="xs:string" />
            <xs:attribute name="partyCode" type="xs:string" />
            <xs:attribute name="userId" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="OrderId" type="xs:unsignedInt" />
      <xs:attribute name="StrategyId" type="xs:string" />
      <xs:attribute name="ActivityId" type="xs:string" />
    </xs:complexType>
  </xs:element>
</xs:schema>
4

1 に答える 1

5

Deriving DataSet Relational Structure from XML Schema (XSD)をご覧ください。この記事は、

通常、スキーマ要素の complexType 子要素ごとに、DataSet にテーブルが生成されます。テーブル構造は、複合型の定義によって決まります。

...

ただし、 complexType 要素が別の complexType 要素内にネストされている場合、最上位の complexType 要素に対してのみテーブルが作成されます。 この場合、ネストされた complexType 要素はDataSet 内のDataTableにマップされ ます。

したがって、基本的にこの場合ReadXML(...) 、2つのテーブルが作成されます

  1. 注文
  2. アイテム

Item complexTypeOrder complexType 内にネストされているため、これら 2 つのテーブル間の関係も生成されます。この関係を作成できるようにするために、新しい列 Order_id が含まれます。

編集

XSD の DataSet リレーションの生成をさらに見てください。この記事では、次のことを確認できます。

msdata :Relationship 注釈を使用すると、ネストされていないスキーマ内の要素間の親子関係を明示的に指定できます。次の例は、Relationship 要素の構造を示しています。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Order">
     ... your definition goes here!
 </xs:element>
 <xs:annotation>
   <xs:appinfo>
     <msdata:Relationship name="OrderItemRelation"
      msdata:parent="Order"
      msdata:child="Item" 
      msdata:parentkey="OrderID"
      msdata:childkey="ANY_COLUMN_IN_NESTED_COMPLEX_TYPE"/>
   </xs:appinfo>
  </xs:annotation>
</xs:schema>

したがって、内部から外部の complexType を参照するために使用される列を変更できますが、この機能を防ぐことはできません

于 2012-09-24T21:02:22.310 に答える