Udostępnij przez


W środowisku .NET przy użyciu SQLXML ładowanie zbiorcze

W tym temacie wyjaśniono, jak można używać funkcji XML ładowanie zbiorcze w środowisku .NET.Aby uzyskać szczegółowe informacje na temat formatu XML ładowanie zbiorcze, zobacz Wykonywanie ładowanie zbiorcze danych XML (SQLXML 4.0).

Aby użyć obiektu SQLXML ładowanie zbiorcze COM z zarządzanego środowiska, trzeba dodać odwołanie projektu do tego obiektu.Spowoduje to wygenerowanie interfejs otoka zarządzana wokół obiektu ładowanie zbiorcze COM.

Uwaga

Zarządzane XML ładowanie zbiorcze nie działa z zarządzanych strumieni i wymaga otoka wokół strumieni macierzystym.Składnik SQLXML ładowanie zbiorcze nie zostanie uruchomiona w środowisku wielowątkowych (atrybut [MTAThread]).Jeśli użytkownik spróbuje uruchomić składnika ładowanie zbiorcze w środowisku multi-wątek, otrzymujesz InvalidCastException wyjątek zawierające następujące informacje dodatkowe: "QueryInterface dla interfejs SQLXMLBULKLOADLib.ISQLXMLBulkLoad nie powiodło się. „ To obejście jest obiekt, który zawiera ładowanie zbiorcze obiektu jedno wątek dostępny (na przykład przy użyciu [STAThread] atrybut jak to pokazano w próbce).

W tym temacie pracy C# przykładową aplikację do ładowanie zbiorcze danych XML w bazie danych.Aby utworzyć próbę pracy, wykonaj następujące kroki:

  1. Utwórz następujące tabele:

    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. Zapisz następujące schematu w pliku (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. Następujący przykładowy dokument XML można zapisać w pliku (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. Uruchom program Visual Studio.

  5. Tworzy aplikację konsoli C#.

  6. Z Projekt Wybierz opcję menuDodaj odwołanie.

  7. W COM Wybierz opcję karcieBiblioteki typów Bulkload 4.0 SQLXML firmy Microsoft (xblkld4.dll) i kliknij przycisk OK.Zostanie wyświetlona Interop.SQLXMLBULKLOADLib wirtualny plik dziennika utworzonego w projekcie.

  8. Zastąp metoda Main() następujący kod.Aktualizacja ConnectionString właściwość i ścieżka do plików schemat oraz dane.

    [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. Aby załadować kodu XML w tabela utworzono, należy skompilować i uruchomić projekt.

    Uwaga

    Odwołanie do masowego obciążenia składnika (xblkld4.dll) można także dodać narzędzie tlbimp.exe, który jest dostępny jako część .NET Framework.Narzędzie to tworzy otoka zarządzana dla macierzystego DLL (xblkld4.dll), które mogą być następnie używane w projekcie dowolnego systemu .NET.Na przykład:

       c:\>tlbimp xblkld4.dll
    

    Spowoduje to utworzenie zarządzanej otoki biblioteki DLL (SQLXMLBULKLOADLib.dll), w których można używać w projekcie systemu .NET Framework.W środowisku .NET Framework należy dodać odwołanie projektu do nowo utworzonego pliku DLL.