Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase SqlBulkCopy

 

Publicado: octubre de 2016

Permite realizar eficazmente la carga masiva de una tabla de SQL Server con datos procedentes de otro origen.

Espacio de nombres:   System.Data.SqlClient
Ensamblado:  System.Data (en System.Data.dll)

System.Object
  System.Data.SqlClient.SqlBulkCopy

public sealed class SqlBulkCopy : IDisposable

NombreDescripción
System_CAPS_pubmethodSqlBulkCopy(SqlConnection)

Inicializa una nueva instancia de la SqlBulkCopy utilizando la instancia abierta especificada de la clase SqlConnection.

System_CAPS_pubmethodSqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializa una nueva instancia de la clase SqlBulkCopy con la instancia abierta existente proporcionada de SqlConnection. La instancia de SqlBulkCopy se comporta según las opciones proporcionadas en el parámetro copyOptions. Si se suministra un valor no nulo SqlTransaction, las operaciones de copia se realizarán dentro de esa transacción.

System_CAPS_pubmethodSqlBulkCopy(String)

Inicializa y abre una nueva instancia de SqlConnection según la connectionString proporcionada. El constructor usa esa SqlConnection para inicializar una nueva instancia de la clase SqlBulkCopy.

System_CAPS_pubmethodSqlBulkCopy(String, SqlBulkCopyOptions)

Inicializa y abre una nueva instancia de SqlConnection según la connectionString proporcionada. El constructor usa esa SqlConnection para inicializar una nueva instancia de la clase SqlBulkCopy. La instancia de SqlConnection se comporta según las opciones proporcionadas en el parámetro copyOptions.

NombreDescripción
System_CAPS_pubpropertyBatchSize

Número de filas de cada lote. Al final de cada lote, las filas del lote se envían al servidor.

System_CAPS_pubpropertyBulkCopyTimeout

Número de segundos para que la operación se complete antes de que se agote el tiempo de espera.

System_CAPS_pubpropertyColumnMappings

SqlBulkCopyColumnMapping devuelve una colección de elementos. Las asignaciones de columnas definen las relaciones entre las columnas del origen de datos y las columnas del destino.

System_CAPS_pubpropertyDestinationTableName

Nombre de la tabla de destino en el servidor.

System_CAPS_pubpropertyEnableStreaming

Habilita o deshabilita un objeto SqlBulkCopy para transmitir datos de un objeto IDataReader

System_CAPS_pubpropertyNotifyAfter

Define el número de filas que se deben procesar antes de generar un evento de notificación.

NombreDescripción
System_CAPS_pubmethodClose()

Cierra la instancia SqlBulkCopy.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

System_CAPS_pubmethodWriteToServer(DataRow[])

Copia todas las filas de la matriz DataRow proporcionada a una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServer(DataTable)

Copia todas las filas del DataTable suministrado a una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServer(DataTable, DataRowState)

Copia únicamente las filas que coinciden con el estado de fila proporcionado en proporcionado DataTable a una tabla de destino especificada por el DestinationTableName propiedad de la SqlBulkCopy objeto.

System_CAPS_pubmethodWriteToServer(DbDataReader)

Copia todas las filas de la matriz DbDataReader suministrada a una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServer(IDataReader)

Copia todas las filas del IDataReader suministrado a una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(DataRow[])

Versión asincrónica de WriteToServer, que copia todas las filas de la matriz de DataRow suministrada en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(DataRow[], CancellationToken)

Versión asincrónica de WriteToServer, que copia todas las filas de la matriz de DataRow suministrada en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.

System_CAPS_pubmethodWriteToServerAsync(DataTable)

Versión asincrónica de WriteToServer, que copia todas las filas del DataTable suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(DataTable, CancellationToken)

Versión asincrónica de WriteToServer, que copia todas las filas del DataTable suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.

System_CAPS_pubmethodWriteToServerAsync(DataTable, DataRowState)

La versión asincrónica de WriteToServer, que copia únicamente las filas que coinciden con el estado de fila proporcionado en el DataTable suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(DataTable, DataRowState, CancellationToken)

La versión asincrónica de WriteToServer, que copia únicamente las filas que coinciden con el estado de fila proporcionado en el DataTable suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.

System_CAPS_pubmethodWriteToServerAsync(DbDataReader)

Versión asincrónica de WriteToServer, que copia todas las filas de la matriz DbDataReader suministrada en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(DbDataReader, CancellationToken)

Versión asincrónica de WriteToServer, que copia todas las filas de la matriz DbDataReader suministrada en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(IDataReader)

Versión asincrónica de WriteToServer, que copia todas las filas del IDataReader suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

System_CAPS_pubmethodWriteToServerAsync(IDataReader, CancellationToken)

Versión asincrónica de WriteToServer, que copia todas las filas del IDataReader suministrado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy.

Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.

NombreDescripción
System_CAPS_pubeventSqlRowsCopied

Se produce cada vez que se ha procesado el número de filas especificado por la propiedad NotifyAfter.

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethodIDisposable.Dispose()

Libera todos los recursos usados por la instancia actual de la clase SqlBulkCopy.

Microsoft SQL Server incluye una conocida utilidad de línea de comandos denominada bcp para mover datos de una tabla a otra, ya sea en un único servidor o entre servidores. La SqlBulkCopy clase le permite escribir soluciones de código administrado que ofrecen una funcionalidad similar. Hay otras maneras de cargar datos en una tabla de SQL Server (instrucciones INSERT, por ejemplo), pero SqlBulkCopy ofrece una ventaja de rendimiento significativas sobre ellos.

La clase SqlBulkCopy sólo se puede utilizar para escribir datos en tablas SQL Server. Sin embargo, el origen de datos no se limita a SQL Server; puede utilizarse cualquier origen de datos, siempre y cuando pueden cargarse los datos en un DataTable de instancia o leerse con una IDataReader instancia.

SqlBulkCopy se producirá un error cuando la carga masiva un DataTable columna de tipo SqlDateTime en un servidor SQL Server se agregan columnas cuyo tipo es uno de los tipos de fecha y hora en SQL Server 2008.

En la siguiente aplicación de consola se demuestra cómo cargar datos mediante la clase SqlBulkCopy. En este ejemplo, un SqlDataReader se utiliza para copiar datos de la Production.Product de tabla en el SQL ServerAdventureWorks base de datos a una tabla similar en la misma base de datos.

System_CAPS_importantImportante

Este ejemplo no se ejecutará a menos que haya creado las tablas de trabajo como se describe en Configuración de ejemplo de copia masiva. Este código se proporciona para mostrar cuál debe ser la sintaxis cuando solo se utiliza SqlBulkCopy. Si las tablas de origen y destino están en la misma instancia de SQL Server, es más fácil y rápido usar Transact-SQL INSERT … SELECT instrucción para copiar los datos.

using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Open the destination connection. In the real world you would 
            // not use SqlBulkCopy to move data from one table to the other 
            // in the same database. This is for demonstration purposes only.
            using (SqlConnection destinationConnection =
                       new SqlConnection(connectionString))
            {
                destinationConnection.Open();

                // Set up the bulk copy object. 
                // Note that the column positions in the source
                // data reader match the column positions in 
                // the destination table so there is no need to
                // map columns.
                using (SqlBulkCopy bulkCopy =
                           new SqlBulkCopy(destinationConnection))
                {
                    bulkCopy.DestinationTableName =
                        "dbo.BulkCopyDemoMatchingColumns";

                    try
                    {
                        // Write from the source to the destination.
                        bulkCopy.WriteToServer(reader);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    finally
                    {
                        // Close the SqlDataReader. The SqlBulkCopy
                        // object is automatically closed at the end
                        // of the using block.
                        reader.Close();
                    }
                }

                // Perform a final count on the destination 
                // table to see how many rows were added.
                long countEnd = System.Convert.ToInt32(
                    commandRowCount.ExecuteScalar());
                Console.WriteLine("Ending row count = {0}", countEnd);
                Console.WriteLine("{0} rows were added.", countEnd - countStart);
                Console.WriteLine("Press Enter to finish.");
                Console.ReadLine();
            }
        }
    }

    private static string GetConnectionString()
        // To avoid storing the sourceConnection string in your code, 
        // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

.NET Framework
Disponible desde 2.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: