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


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

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

Для использования объекта COM массовой загрузки SQLXML в управляемой среде необходимо добавить в этот объект ссылку на проект. Это сформирует управляемый интерфейс оболочки объекта массовой загрузки COM.

ПримечаниеПримечание

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

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

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

    CREATE TABLE Ord (         OrderID     int identity(1,1)  PRIMARY KEY,         CustomerID  varchar(5))GOCREATE TABLE Product (         ProductID   int identity(1,1) PRIMARY KEY,         ProductName varchar(20))GOCREATE 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. Сохраните в файл (data.xml) следующий образец 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 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 Framework. Это средство создает управляемую оболочку для собственной DLL-библиотеки (xblkld4.dll), которую затем можно использовать в любом проекте .NET. Например,

       c:\>tlbimp xblkld4.dll
    

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