Condividi tramite


Uso del caricamento massiccio SQLXML nell'ambiente .NET

In questo argomento viene illustrato come usare la funzionalità di caricamento bulk XML nell'ambiente .NET. Per informazioni dettagliate sul caricamento bulk XML, vedere Esecuzione del caricamento bulk di dati XML (SQLXML 4.0).

Per usare l'oggetto COM di caricamento bulk SQLXML da un ambiente gestito, è necessario aggiungere un riferimento al progetto a questo oggetto. Viene generata un'interfaccia wrapper gestita intorno all'oggetto COM di caricamento bulk.

Annotazioni

Il caricamento bulk XML gestito non funziona con i flussi gestiti e richiede un wrapper per i flussi nativi. Il componente caricamento bulk SQLXML non verrà eseguito in un ambiente multithread (attributo '[MTAThread]'). Se si tenta di eseguire il componente caricamento bulk in un ambiente multithread, viene visualizzata un'eccezione InvalidCastException con le informazioni aggiuntive seguenti: "QueryInterface per l'interfaccia SQLXMLBULKLOADLib.ISQLXMLBulkLoad non riuscita". La soluzione alternativa consiste nel rendere accessibile l'oggetto Bulk Load a thread singolo, ad esempio usando l'attributo [STAThread] come illustrato nell'esempio.

Questo argomento fornisce un'applicazione di esempio C# funzionante per caricare in blocco i dati XML nel database. Per creare un esempio funzionante, seguire questa procedura:

  1. Creare le tabelle seguenti:

    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. Salvare lo schema seguente in un file (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. Salvare il documento XML di esempio seguente in un file (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. Avvia Visual Studio.

  5. Creare un'applicazione console C#.

  6. Dal menu Progetto selezionare Aggiungi riferimento.

  7. Nella scheda COM selezionare Microsoft SQLXML Bulkload 4.0 Type Library (xblkld4.dll) e fare clic su OK. Verrà visualizzato l'assembly Interop.SQLXMLBULKLOADLib creato nel progetto.

  8. Sostituire il metodo Main() con il codice seguente. Aggiornare la proprietà ConnectionString e il percorso del file ai file di schema e dati.

    [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. Per caricare il codice XML nella tabella creata, compilare ed eseguire il progetto.

    Annotazioni

    Il riferimento al componente caricamento bulk (xblkld4.dll) può essere aggiunto anche usando lo strumento tlbimp.exe, disponibile come parte di .NET Framework. Questo strumento crea un wrapper gestito per la DLL nativa (xblkld4.dll), che può quindi essere usato in qualsiasi progetto .NET. Per esempio:

    c:\>tlbimp xblkld4.dll  
    

    In questo modo viene creata la DLL wrapper gestita (SQLXMLBULKLOADLib.dll) che è possibile usare nel progetto .NET Framework. In .NET Framework si aggiunge il riferimento al progetto alla DLL appena creata.

Vedere anche

Esecuzione del caricamento bulk di dati XML (SQLXML 4.0)