.NET 環境での SQLXML 一括読み込みの使用
ここでは、XML 一括読み込み機能を .NET 環境で使用する方法について説明します。XML 一括読み込みの詳細については、「XML データの一括読み込みの実行 (SQLXML 4.0)」を参照してください。
マネージ環境から SQLXML 一括読み込み COM オブジェクトを使用するには、このオブジェクトにプロジェクト参照を追加する必要があります。これによって、一括読み込み COM オブジェクトのマネージ ラッパー インターフェイスが生成されます。
注 |
---|
マネージ XML 一括読み込みはマネージ ストリームでは動作せず、ネイティブ ストリームのラッパーが必要です。SQLXML 一括読み込みコンポーネントはマルチスレッド環境 ('[MTAThread]' 属性) では動作しません。マルチスレッド環境で一括読み込みコンポーネントを実行すると、InvalidCastException 例外が発生し、"インターフェイス SQLXMLBULKLOADLib.ISQLXMLBulkLoad の QueryInterface が失敗しました。" という追加情報が表示されます。これを回避するには、一括読み込みオブジェクトを含むオブジェクトを、単一スレッドでアクセスできるようにします。たとえば、サンプルに示すように [STAThread] 属性を使用します。 |
ここでは、データベースに XML データの一括読み込みを行う、実際の C# サンプル アプリケーションを紹介します。実際のサンプルを作成するには、次の手順に従います。
次のテーブルを作成します。
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
次のスキーマをファイル 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>
次のサンプル 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>
Visual Studio を起動します。
C# コンソール アプリケーションを作成します。
[プロジェクト] メニューの [参照の追加] をクリックします。
[COM] タブで、[Microsoft SQLXML Bulkload 4.0 Type Library] (xblkld4.dll) をクリックし、[OK] をクリックします。これで、プロジェクトに Interop.SQLXMLBULKLOADLib アセンブリが作成されます。
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()); } }
作成したテーブルに XML を読み込むには、プロジェクトをビルドして実行します。
注 .NET Framework で提供される tlbimp.exe ツールを使用して、一括読み込みコンポーネント (xblkld4.dll) への参照を追加することもできます。このツールでは、ネイティブ DLL (xblkld4.dll) のマネージ ラッパーが作成され、任意の .NET プロジェクトで使用できます。次に例を示します。
c:\>tlbimp xblkld4.dll
この例では、.NET Framework プロジェクトで使用できるマネージ ラッパー DLL (SQLXMLBULKLOADLib.dll) が作成されます。新しく作成した DLL へのプロジェクト参照を、.NET Framework で追加します。