Поделиться через


Использование массовой загрузки SQLXML в среде .NET

В этом разделе объясняется, как функции массовой загрузки XML можно использовать в среде .NET. Подробные сведения о массовой загрузке XML см. в разделе "Выполнение массовой загрузки ДАННЫХ XML" (SQLXML 4.0).

Чтобы использовать com-объект массовой загрузки SQLXML из управляемой среды, необходимо добавить ссылку на проект в этот объект. При этом создается интерфейс управляемой оболочки вокруг объекта BULK Load COM.

Замечание

Массовая загрузка управляемого XML не работает с управляемыми потоками и требует оболочки вокруг собственных потоков. Компонент массовой загрузки SQLXML не будет выполняться в многопоточной среде (атрибут "[MTAThread]". Если вы пытаетесь запустить компонент массовой загрузки в среде с несколькими потоками, вы получите исключение InvalidCastException со следующими дополнительными сведениями: "QueryInterface для интерфейса SQLXMLBULKLOADLib.ISQLXMLBulkLoad завершилось сбоем". Обходное решение заключается в том, чтобы сделать объект, содержащий объект Bulk Load доступным для одного потока (например, с помощью атрибута [STAThread] , как показано в примере).

В этом разделе представлен пример приложения C# для массовой загрузки XML-данных в базе данных. Чтобы создать рабочий пример, выполните следующие действия.

  1. Создайте следующие таблицы:

    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. Сохраните следующую схему в файле (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. Сохраните следующий пример 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>  
    
  4. Запустите Visual Studio.

  5. Создайте приложение командной строки на языке C#.

  6. В меню Проект выберите Добавить ссылку.

  7. На вкладке COM выберите библиотеку типов Microsoft SQLXML Bulkload 4.0 (xblkld4.dll) и нажмите кнопку "ОК". Вы увидите сборку Interop.SQLXMLBULKLOADLib , созданную в проекте.

  8. Замените метод 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());  
             }  
       }  
    
  9. Чтобы загрузить XML-файл в созданной таблице, выполните сборку и запуск проекта.

    Замечание

    Ссылку на компонент массовой загрузки (xblkld4.dll) также можно добавить с помощью средства tlbimp.exe, которое доступно в рамках платформы .NET. Это средство создает управляемую оболочку для собственной библиотеки DLL (xblkld4.dll), которая затем может использоваться в любом проекте .NET. Рассмотрим пример.

    c:\>tlbimp xblkld4.dll  
    

    При этом создается библиотека DLL управляемой оболочки (SQLXMLBULKLOADLib.dll), которую можно использовать в проекте .NET Framework. В .NET Framework вы добавите ссылку на проект в только что созданную библиотеку DLL.

См. также

Массовая загрузка XML-данных (SQLXML 4.0)