本主題說明如何在 .NET 環境中使用 XML 大量載入功能。 如需 XML 大量載入的詳細資訊,請參閱執行 XML 數據的大量載入(SQLXML 4.0)。
若要從受控環境使用 SQLXML 大量載入 COM 物件,您需要新增此物件的項目參考。 這會在大量載入 COM 物件周圍產生 Managed 包裝函式介面。
備註
Managed XML 大量載入不適用於 Managed 數據流,而且需要原生數據流周圍的包裝函式。 SQLXML 大量載入元件不會在多線程環境中執行 ('[MTAThread]' 屬性)。 如果您嘗試在多線程環境中執行大量載入元件,您會收到 InvalidCastException 例外狀況,其中包含下列其他資訊:「SQLXMLBULKLOADLib.ISQLXMLBulkLoad 介面的 QueryInterface 失敗。因應措施是讓包含大量載入物件單一線程的物件可供存取(例如,使用 [STAThread] 屬性,如範例所示)。
本主題提供可運作的 C# 範例應用程式,以大量載入資料庫中的 XML 數據。 若要建立可運作的範例,請遵循下列步驟:
建立下列資料表:
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 大量載入 4.0 類型庫 ]xblkld4.dll,然後按兩下 [ 確定]。 您會看到在專案中建立的 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,請建置並執行專案。
備註
大量載入元件 (xblkld4.dll) 的參考也可以使用 .NET Framework 的 tlbimp.exe 工具來新增。 此工具會建立原生 DLL 的 Managed 包裝函式(xblkld4.dll),然後可用於任何 .NET 專案中。 例如:
c:\>tlbimp xblkld4.dll這會建立您可以在 .NET Framework 專案中使用的Managed 包裝函式 DLL (SQLXMLBULKLOADLib.dll)。 在 .NET Framework 中,您會將項目參考新增至新建立的 DLL。