共用方式為


在 .NET 環境中使用 SQLXML 大量載入

本主題說明如何在 .NET 環境中使用 XML 大量載入功能。 如需 XML 大量載入的詳細資訊,請參閱執行 XML 數據的大量載入(SQLXML 4.0)。

若要從受控環境使用 SQLXML 大量載入 COM 物件,您需要新增此物件的項目參考。 這會在大量載入 COM 物件周圍產生 Managed 包裝函式介面。

備註

Managed XML 大量載入不適用於 Managed 數據流,而且需要原生數據流周圍的包裝函式。 SQLXML 大量載入元件不會在多線程環境中執行 ('[MTAThread]' 屬性)。 如果您嘗試在多線程環境中執行大量載入元件,您會收到 InvalidCastException 例外狀況,其中包含下列其他資訊:「SQLXMLBULKLOADLib.ISQLXMLBulkLoad 介面的 QueryInterface 失敗。因應措施是讓包含大量載入物件單一線程的物件可供存取(例如,使用 [STAThread] 屬性,如範例所示)。

本主題提供可運作的 C# 範例應用程式,以大量載入資料庫中的 XML 數據。 若要建立可運作的範例,請遵循下列步驟:

  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 大量載入 4.0 類型庫 ]xblkld4.dll,然後按兩下 [ 確定]。 您會看到在專案中建立的 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 Framework 的 tlbimp.exe 工具來新增。 此工具會建立原生 DLL 的 Managed 包裝函式(xblkld4.dll),然後可用於任何 .NET 專案中。 例如:

    c:\>tlbimp xblkld4.dll  
    

    這會建立您可以在 .NET Framework 專案中使用的Managed 包裝函式 DLL (SQLXMLBULKLOADLib.dll)。 在 .NET Framework 中,您會將項目參考新增至新建立的 DLL。

另請參閱

執行大量 XML 資料載入 (SQLXML 4.0)