次の方法で共有


.NET 環境での SQLXML 一括読み込みの使用

このトピックでは、.NET 環境で XML 一括読み込み機能を使用する方法について説明します。 XML 一括読み込みの詳細については、「 XML データの一括読み込みの実行 (SQLXML 4.0)」を参照してください。

マネージド環境から SQLXML 一括読み込み COM オブジェクトを使用するには、このオブジェクトにプロジェクト参照を追加する必要があります。 これにより、一括読み込み COM オブジェクトの周囲にマネージド ラッパー インターフェイスが生成されます。

マネージド XML の一括読み込みはマネージド ストリームでは機能せず、ネイティブ ストリームのラッパーが必要です。 SQLXML 一括読み込みコンポーネントは、マルチスレッド環境 ('[MTAThread]' 属性) では実行されません。 マルチスレッド環境で一括読み込みコンポーネントを実行しようとすると、InvalidCastException 例外が発生し、"QueryInterface for interface SQLXMLBULKLOADLib.ISQLXMLBulkLoad failed" という追加情報が表示されます。回避策は、一括読み込みオブジェクトを含むオブジェクトを単一スレッドでアクセスできるようにすることです (たとえば、サンプルに示すように [STAThread] 属性を使用します)。

このトピックでは、データベース内の XML データを一括読み込みするための動作する C# サンプル アプリケーションについて説明します。 作業サンプルを作成するには、次の手順に従います。

  1. 次の表を作成します。

    CREATE TABLE Ord (  
             OrderID     int identity(1,1)  PRIMARY KEY,  
             CustomerID  varchar(5))  
    GO  
    CREATE TABLE Product (  
             ProductID   int identity(1,1) PRIMARY KEY,  
             ProductName varchar(20))  
    GO  
    CREATE TABLE OrderDetail (  
           OrderID     int FOREIGN KEY REFERENCES Ord(OrderID),  
           ProductID   int FOREIGN KEY REFERENCES Product(ProductID),  
                       CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID))  
    GO  
    
  2. 次のスキーマをファイル (schema.xml) に保存します。

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
    <xsd:annotation>  
      <xsd:appinfo>  
        <sql:relationship name="OrderOD"  
              parent="Ord"  
              parent-key="OrderID"  
              child="OrderDetail"  
              child-key="OrderID" />  
    
        <sql:relationship name="ODProduct"  
              parent="OrderDetail"  
              parent-key="ProductID"  
              child="Product"  
              child-key="ProductID"   
              inverse="true"/>  
      </xsd:appinfo>  
    </xsd:annotation>  
    
      <xsd:element name="Order" sql:relation="Ord"   
                                sql:key-fields="OrderID" >  
       <xsd:complexType>  
         <xsd:sequence>  
            <xsd:element name="Product" sql:relation="Product"   
                         sql:key-fields="ProductID"  
                         sql:relationship="OrderOD ODProduct">  
              <xsd:complexType>  
                 <xsd:attribute name="ProductID" type="xsd:int" />  
                 <xsd:attribute name="ProductName" type="xsd:string" />  
              </xsd:complexType>  
            </xsd:element>  
         </xsd:sequence>  
            <xsd:attribute name="OrderID"   type="xsd:integer" />   
            <xsd:attribute name="CustomerID"   type="xsd:string" />  
        </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. 次のサンプル XML ドキュメントをファイル (data.xml) に保存します。

    <ROOT>    
      <Order OrderID="11" CustomerID="ALFKI">  
        <Product ProductID="11" ProductName="Chai" />  
        <Product ProductID="22" ProductName="Chang" />  
      </Order>  
      <Order OrderID="22" CustomerID="ANATR">  
         <Product ProductID="33" ProductName="Aniseed Syrup" />  
        <Product ProductID="44" ProductName="Gumbo Mix" />  
      </Order>  
    </ROOT>  
    
  4. Visual Studio を起動します。

  5. C# コンソール アプリケーションを作成します。

  6. [ プロジェクト ] メニューの [ 参照の追加] を選択します。

  7. [COM] タブで、Microsoft SQLXML Bulkload 4.0 タイプ ライブラリ (xblkld4.dll) を選択し、[OK] をクリックします。 プロジェクトで作成された Interop.SQLXMLBULKLOADLib アセンブリが表示されます。

  8. Main() メソッドを次のコードに置き換えます。 ConnectionString プロパティと、スキーマ ファイルとデータ ファイルへのファイル パスを更新します。

    [STAThread]  
       static void Main(string[] args)  
       {     
             try  
             {  
                SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class();  
                objBL.ConnectionString = "Provider=sqloledb;server=server;database=databaseName;integrated security=SSPI";  
                objBL.ErrorLogFile = "error.xml";  
                objBL.KeepIdentity = false;  
                objBL.Execute ("schema.xml","data.xml");  
             }  
             catch(Exception e)  
             {  
             Console.WriteLine(e.ToString());  
             }  
       }  
    
  9. 作成したテーブルに XML を読み込むには、プロジェクトをビルドして実行します。

    一括読み込みコンポーネント (xblkld4.dll) への参照は、.NET フレームワークの一部として使用できる tlbimp.exe ツールを使用して追加することもできます。 このツールは、ネイティブ DLL (xblkld4.dll) のマネージド ラッパーを作成します。このラッパーは、任意の .NET プロジェクトで使用できます。 例えば次が挙げられます。

    c:\>tlbimp xblkld4.dll  
    

    これにより、.NET Framework プロジェクトで使用できるマネージド ラッパー DLL (SQLXMLBULKLOADLib.dll) が作成されます。 .NET Framework では、新しく作成された DLL にプロジェクト参照を追加します。

こちらもご覧ください

XML データの一括読み込みの実行 (SQLXML 4.0)