Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird erläutert, wie die XML-Massenladefunktion in der .NET-Umgebung verwendet werden kann. Ausführliche Informationen zum XML-Massenladevorgang finden Sie unter Ausführen des Massenladevorgangs von XML-Daten (SQLXML 4.0).For detailed information about XML Bulk Load, see Performing Bulk Load of XML Data (SQLXML 4.0).
Um das SQLXML Bulk Load COM-Objekt aus einer verwalteten Umgebung zu verwenden, müssen Sie diesem Objekt einen Projektverweis hinzufügen. Dadurch wird eine verwaltete Wrapperschnittstelle um das COM-Objekt "Massenladevorgang" generiert.
Hinweis
Verwaltete XML-Massenlast funktioniert nicht mit verwalteten Datenströmen und erfordert einen Wrapper um systemeigene Datenströme. Die SQLXML-Massenladekomponente wird nicht in einer Multithreadumgebung ('[MTAThread]' Attribut) ausgeführt. Wenn Sie versuchen, die Massenladekomponente in einer Multithreadumgebung auszuführen, erhalten Sie eine InvalidCastException-Ausnahme mit den folgenden zusätzlichen Informationen: "QueryInterface for interface SQLXMLBULKLOADLib.ISQLXMLBulkLoad failed." Die Problemumgehung besteht darin, das Objekt, das das Massenladeobjekt enthält, barrierefrei zu machen (z. B. mithilfe des [STAThread] -Attributs wie im Beispiel gezeigt).
Dieses Thema enthält eine funktionierende C#-Beispielanwendung zum Massenladen von XML-Daten in der Datenbank. Führen Sie die folgenden Schritte aus, um ein Arbeitsbeispiel zu erstellen:
Erstellen Sie die folgenden Tabellen:
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)) GOSpeichern Sie das folgende Schema in einer Datei (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>Speichern Sie das folgende XML-Beispieldokument in einer Datei (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>Starten Sie Visual Studio.
Erstellen Sie eine C#- Konsolenanwendung.
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus.
Wählen Sie auf der Registerkarte COM die Option "Microsoft SQLXML Bulkload 4.0 Type Library " (xblkld4.dll) aus, und klicken Sie auf "OK". Die im Projekt erstellte Interop.SQLXMLBULKLOADLib-Assembly wird angezeigt.
Ersetzen Sie die Main()-Methode durch den folgenden Code. Aktualisieren Sie die ConnectionString-Eigenschaft und den Dateipfad zu den Schema- und Datendateien.
[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()); } }Um den XML-Code in der von Ihnen erstellten Tabelle zu laden, erstellen Sie das Projekt, und führen Sie es aus.
Hinweis
Der Verweis auf die Massenladekomponente (xblkld4.dll) kann auch mithilfe des tools tlbimp.exe hinzugefügt werden, das als Teil von .NET Framework verfügbar ist. Dieses Tool erstellt einen verwalteten Wrapper für die systemeigene DLL (xblkld4.dll), die dann in jedem .NET-Projekt verwendet werden kann. Beispiel:
c:\>tlbimp xblkld4.dllDadurch wird die verwaltete Wrapper-DLL (SQLXMLBULKLOADLib.dll) erstellt, die Sie im .NET Framework-Projekt verwenden können. Im .NET Framework fügen Sie einen Projektverweis zur neu erstellten DLL hinzu.