Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se explica cómo se puede usar la funcionalidad carga masiva XML en el entorno de .NET. Para obtener información detallada sobre la carga masiva XML, vea Realizar la carga masiva de datos XML (SQLXML 4.0).
Para usar el objeto COM de carga masiva de SQLXML desde un entorno administrado, debe agregar una referencia de proyecto a este objeto. Esto genera una interfaz contenedora administrada alrededor del objeto COM de carga masiva.
Nota:
La carga masiva xml administrada no funciona con flujos administrados y requiere un contenedor en torno a secuencias nativas. El componente Carga masiva de SQLXML no se ejecutará en un entorno multiproceso ('[MTAThread]' atributo). Si intenta ejecutar el componente de carga masiva en un entorno de varios subprocesos, obtendrá una excepción InvalidCastException con la siguiente información adicional: "Error en QueryInterface para la interfaz SQLXMLBULKLOADLib.ISQLXMLBulkLoad". La solución consiste en hacer que el objeto que contiene el objeto Bulk Load sea accesible (por ejemplo, mediante el atributo [STAThread] como se muestra en el ejemplo).
En este tema se proporciona una aplicación de ejemplo de C# en funcionamiento para cargar datos XML de forma masiva en la base de datos. Para crear un ejemplo de trabajo, siga estos pasos:
Cree las tablas siguientes:
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)) GOGuarde el esquema siguiente en un archivo (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>Guarde el siguiente documento XML de ejemplo en un archivo (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>Inicie Visual Studio.
Cree una aplicación de consola de C#.
En el menú Proyecto , seleccione Agregar referencia.
En la pestaña COM , seleccione Microsoft SQLXML Bulkload 4.0 Type Library (xblkld4.dll) y haga clic en Aceptar. Verá el ensamblado Interop.SQLXMLBULKLOADLib creado en el proyecto.
Reemplace el método Main() por el código siguiente. Actualice la propiedad ConnectionString y la ruta de acceso del archivo a los archivos de datos y esquema.
[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()); } }Para cargar el XML en la tabla que creó, compile y ejecute el proyecto.
Nota:
También se puede agregar la referencia al componente carga masiva (xblkld4.dll) mediante la herramienta tlbimp.exe, que está disponible como parte de .NET Framework. Esta herramienta crea un contenedor administrado para el archivo DLL nativo (xblkld4.dll), que luego se puede usar en cualquier proyecto de .NET. Por ejemplo:
c:\>tlbimp xblkld4.dllEsto crea el archivo DLL del contenedor administrado (SQLXMLBULKLOADLib.dll) que puede usar en el proyecto de .NET Framework. En .NET Framework, agregará referencia de proyecto al archivo DLL recién creado.