Использование массовой загрузки SQLXML в среде .NET
В этом разделе объясняется, как можно использовать функциональность массовой загрузки XML в среде .NET. Подробные сведения об массовой загрузке XML см. в разделе Выполнение массовой загрузки XML-данных (SQLXML 4.0).
Для использования объекта COM массовой загрузки SQLXML в управляемой среде необходимо добавить в этот объект ссылку на проект. Это сформирует управляемый интерфейс оболочки объекта массовой загрузки COM.
Примечание |
|---|
Управляемая массовая загрузка XML не работает с управляемыми потоками и требует оболочки собственных потоков. Компонент массовой загрузки SQLXML не будет запущен в многопоточной среде (атрибут '[MTAThread]'). При попытке запустить компонент массовой загрузки в многопоточной среде будет выдано исключение InvalidCastException со следующей дополнительной информацией: "Метод QueryInterface для интерфейса SQLXMLBULKLOADLib.ISQLXMLBulkLoad завершился с ошибкой". Чтобы обойти эту проблему, можно создать объект, который содержит доступный только в однопоточном режиме объект массовой загрузки (например, при помощи атрибута [STAThread], как показано в образце). |
Этот раздел содержит образец реализации приложения на языке C# для массовой загрузки XML-данных в базу данных. Чтобы создать образец реализации, выполните следующие шаги:
Создайте следующие таблицы:
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Сохраните в файл (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>Сохраните в файл (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>Запустите среду Visual Studio.
Создайте приложение командной строки на языке C#.
В меню Проект выберите пункт Добавить ссылку.
На вкладке COM выберите Библиотека типов массовой загрузки Microsoft SQLXML 4.0 (xblkld4.dll) и нажмите кнопку ОК. Будет отображена сборка Interop.SQLXMLBULKLOADLib, создаваемая в данном проекте.
Замените метод 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()); } }Для загрузки XML в создаваемую таблицу постойте и запустите проект.
ПримечаниеСсылку на компонент массовой загрузки (xblkld4.dll) можно также добавить при помощи средства tlbimp.exe, которое доступно как часть платформы .NET Framework. Это средство создает управляемую оболочку для собственной DLL-библиотеки (xblkld4.dll), которую затем можно использовать в любом проекте .NET. Например,
c:\>tlbimp xblkld4.dllЭто средство создает DLL-библиотеку управляемой оболочки (SQLXMLBULKLOADLib.dll), которую можно использовать в проекте платформы .NET Framework. В .NET Framework ссылка на проект добавляется к вновь созданной DLL-библиотеке.