Partager via


Utilisation du chargement en bloc SQLXML dans l’environnement .NET

Cette rubrique explique comment les fonctionnalités de chargement en masse XML peuvent être utilisées dans l’environnement .NET. Pour plus d’informations sur le chargement en masse XML, consultez Effectuer une charge en bloc de données XML (SQLXML 4.0).

Pour utiliser l’objet COM de chargement en bloc SQLXML à partir d’un environnement managé, vous devez ajouter une référence de projet à cet objet. Cela génère une interface wrapper managée autour de l’objet COM de chargement en bloc.

Remarque

La charge en bloc XML managée ne fonctionne pas avec les flux managés et nécessite un wrapper autour de flux natifs. Le composant de chargement en bloc SQLXML ne s’exécute pas dans un environnement multithread (attribut « [MTAThread] »). Si vous tentez d’exécuter le composant Chargement en bloc dans un environnement multithread, vous obtenez une exception InvalidCastException avec les informations supplémentaires suivantes : « QueryInterface for interface SQLXMLBULKLOADLib.ISQLXMLBulkLoad failed ». La solution de contournement consiste à rendre l’objet qui contient l’objet Load en bloc accessible à thread unique (par exemple, à l’aide de l’attribut [STAThread] comme indiqué dans l’exemple).

Cette rubrique fournit un exemple d’application C# fonctionnel pour charger en bloc des données XML dans la base de données. Pour créer un exemple de travail, procédez comme suit :

  1. Créez les tableaux suivants :

    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. Enregistrez le schéma suivant dans un fichier (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. Enregistrez l’exemple de document XML suivant dans un fichier (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. Démarrez Visual Studio.

  5. Créez une application console C#.

  6. Dans le menu Projet , sélectionnez Ajouter une référence.

  7. Sous l’onglet COM , sélectionnez Microsoft SQLXML Bulkload 4.0 Type Library (xblkld4.dll) et cliquez sur OK. L’assembly Interop.SQLXMLBULKLOADLib créé dans le projet s’affiche.

  8. Remplacez la méthode Main() par le code suivant. Mettez à jour la propriété ConnectionString et le chemin d’accès du fichier aux fichiers de schéma et de données.

    [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. Pour charger le code XML dans la table que vous avez créée, générez et exécutez le projet.

    Remarque

    La référence au composant Chargement en bloc (xblkld4.dll) peut également être ajoutée à l’aide de l’outil tlbimp.exe, disponible dans le cadre du .NET Framework. Cet outil crée un wrapper managé pour la DLL native (xblkld4.dll), qui peut ensuite être utilisé dans n’importe quel projet .NET. Par exemple:

    c:\>tlbimp xblkld4.dll  
    

    Cela crée la DLL du wrapper managé (SQLXMLBULKLOADLib.dll) que vous pouvez utiliser dans le projet .NET Framework. Dans le .NET Framework, vous ajoutez une référence de projet à la DLL nouvellement créée.

Voir aussi

Exécution d’une charge en bloc de données XML (SQLXML 4.0)