Esta documentación está archivada y no tiene mantenimiento.

SqlBulkCopyColumnMappingCollection (Clase)

Nota: esta clase es nueva en la versión 2.0 de .NET Framework.

Colección de objetos SqlBulkCopyColumnMapping que hereda de CollectionBase.

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

public sealed class SqlBulkCopyColumnMappingCollection : CollectionBase
public final class SqlBulkCopyColumnMappingCollection extends CollectionBase
public final class SqlBulkCopyColumnMappingCollection extends CollectionBase

Las asignaciones de columnas definen la asignación entre el origen de datos y la tabla de destino.

Si no hay asignaciones definidas, es decir, la colección ColumnMappings está vacía, se asignan las columnas implícitamente basándose en su posición ordinal. Para ello, es preciso que coincidan el esquema de origen y el esquema de destino. Si no coinciden, se produce una excepción InvalidOperationException.

Si la colección ColumnMappings no está vacía, no es preciso especificar cada columna del origen de datos. Se omiten las columnas no asignadas por la colección.

Para hacer referencia a las columnas de origen y de destino, se puede utilizar su nombre o su posición ordinal. Se pueden mezclar las referencias por nombre y por posición ordinal en la misma colección de asignaciones.

En el siguiente ejemplo, se realiza una copia masiva de los datos de una tabla de origen de la base de datos de ejemplo AdventureWorks a una tabla de destino de la misma base de datos. Aunque el número de columnas de destino coincide con el número de columnas de origen, los nombres y posiciones ordinales de las columnas no coinciden. Se agregan objetos SqlBulkCopyColumnMapping a la colección SqlBulkCopyColumnMappingCollection para el objeto SqlBulkCopy con el fin de crear un mapa de columnas para la copia masiva.

NotaImportante:

Este ejemplo no se ejecutará a menos que haya creado las tablas de trabajo como se describe en Creación de tablas para los ejemplos de copia masiva. Este código se proporciona para mostrar cuál debe ser la sintaxis cuando sólo se utiliza SqlBulkCopy. Si las tablas de origen y de destino están en la misma instancia de SQL Server, lo más rápido y sencillo es usar una instrucción INSERT … SELECT de Transact-SQL 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.BulkCopyDemoDifferentColumns;",
                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();

            // Set up the bulk copy object. 
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoDifferentColumns";

                // The column order in the source doesn't match the order 
                // in the destination, so ColumnMappings must be defined.
                bulkCopy.ColumnMappings.Add("ProductID", "ProdID");
                bulkCopy.ColumnMappings.Add("Name", "ProdName");
                bulkCopy.ColumnMappings.Add("ProductNumber", "ProdNum");

                // Write from the source to the destination.
                try
                {
                    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;";
    }
}

System.Object
   System.Collections.CollectionBase
    System.Data.SqlClient.SqlBulkCopyColumnMappingCollection

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0
Mostrar: