SqlBulkCopyColumnMapping Classe

Definição

Define o mapeamento entre uma coluna em uma fonte de dados da instância de SqlBulkCopy e uma coluna na tabela de destino da instância.Defines the mapping between a column in a SqlBulkCopy instance's data source and a column in the instance's destination table.

public ref class SqlBulkCopyColumnMapping sealed
public sealed class SqlBulkCopyColumnMapping
type SqlBulkCopyColumnMapping = class
Public NotInheritable Class SqlBulkCopyColumnMapping
Herança
SqlBulkCopyColumnMapping

Exemplos

O exemplo a seguir copia em massa dados de uma tabela de origem no banco de dado de exemplo AdventureWorks para uma tabela de destino no mesmo banco de dados.The following example bulk copies data from a source table in the AdventureWorks sample database to a destination table in the same database. Embora o número de colunas no destino corresponda ao número de colunas na origem e cada coluna de destino esteja na mesma posição ordinal que sua coluna de origem correspondente, os nomes de coluna não coincidem.Although the number of columns in the destination matches the number of columns in the source, and each destination column is in the same ordinal position as its corresponding source column, the column names do not match. SqlBulkCopyColumnMappingos objetos são usados para criar um mapa de coluna para a cópia em massa.SqlBulkCopyColumnMapping objects are used to create a column map for the bulk copy.

Importante

Este exemplo não será executado a menos que você tenha criado as tabelas de trabalho conforme descrito em configuração de exemplo de cópia em massa.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Esse código é fornecido para demonstrar a sintaxe somente para uso de SqlBulkCopy .This code is provided to demonstrate the syntax for using SqlBulkCopy only. Se as tabelas de origem e destino estiverem na mesma instância de SQL Server, será mais fácil e rápido usar uma instrução Transact- INSERT … SELECT SQL para copiar os dados.If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the data.

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";

                // Set up the column mappings by name.
                SqlBulkCopyColumnMapping mapID =
                    new SqlBulkCopyColumnMapping("ProductID", "ProdID");
                bulkCopy.ColumnMappings.Add(mapID);

                SqlBulkCopyColumnMapping mapName =
                    new SqlBulkCopyColumnMapping("Name", "ProdName");
                bulkCopy.ColumnMappings.Add(mapName);

                SqlBulkCopyColumnMapping mapMumber =
                    new SqlBulkCopyColumnMapping("ProductNumber", "ProdNum");
                bulkCopy.ColumnMappings.Add(mapMumber);

                // 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;";
    }
}
Imports System.Data.SqlClient

Module Module1
    Sub Main()
        Dim connectionString As String = GetConnectionString()

        ' Open a connection to the AdventureWorks database.
        Using sourceConnection As SqlConnection = _
           New SqlConnection(connectionString)
            sourceConnection.Open()

            ' Perform an initial count on the destination table.
            Dim commandRowCount As New SqlCommand( _
            "SELECT COUNT(*) FROM dbo.BulkCopyDemoDifferentColumns;", _
                sourceConnection)
            Dim countStart As Long = _
               System.Convert.ToInt32(commandRowCount.ExecuteScalar())
            Console.WriteLine("Starting row count = {0}", countStart)

            ' Get data from the source table as a SqlDataReader.
            Dim commandSourceData As SqlCommand = New SqlCommand( _
               "SELECT ProductID, Name, ProductNumber " & _
               "FROM Production.Product;", sourceConnection)
            Dim reader As SqlDataReader = commandSourceData.ExecuteReader

            ' Set up the bulk copy object.
            Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connectionString)
                bulkCopy.DestinationTableName = _
                "dbo.BulkCopyDemoDifferentColumns"

                ' Set up the column mappings by name.
                Dim mapID As New _
                  SqlBulkCopyColumnMapping("ProductID", "ProdID")
                bulkCopy.ColumnMappings.Add(mapID)

                Dim mapName As New _
                 SqlBulkCopyColumnMapping("Name", "ProdName")
                bulkCopy.ColumnMappings.Add(mapName)

                Dim mapMumber As New _
                 SqlBulkCopyColumnMapping("ProductNumber", "ProdNum")
                bulkCopy.ColumnMappings.Add(mapMumber)

                ' Write from the source to the destination.
                Try
                    bulkCopy.WriteToServer(reader)

                Catch ex As Exception
                    Console.WriteLine(ex.Message)

                Finally
                    ' Close the SqlDataReader. The SqlBulkCopy
                    ' object is automatically closed at the end
                    ' of the Using block.
                    reader.Close()
                End Try
            End Using

            ' Perform a final count on the destination table
            ' to see how many rows were added.
            Dim countEnd As Long = _
                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()
        End Using
    End Sub

    Private Function GetConnectionString() As String
        ' 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;"
    End Function
End Module

Comentários

Os mapeamentos de coluna definem o mapeamento entre a fonte de dados e a tabela de destino.Column mappings define the mapping between data source and the target table.

Se os mapeamentos não estiverem definidos, ou seja, ColumnMappings a coleção estiver vazia, as colunas serão mapeadas implicitamente com base na posição ordinal.If mappings are not defined - that is, the ColumnMappings collection is empty - the columns are mapped implicitly based on ordinal position. Para que isso funcione, os esquemas de origem e destino devem corresponder.For this to work, source and target schemas must match. Se não tiverem, um InvalidOperationException será lançado.If they do not, an InvalidOperationException will be thrown.

Se a ColumnMappings coleção não estiver vazia, nem todas as colunas presentes na fonte de dados precisarão ser especificadas.If the ColumnMappings collection is not empty, not every column present in the data source has to be specified. Aqueles não mapeados pela coleção são ignorados.Those not mapped by the collection are ignored.

Você pode consultar as colunas de origem e de destino por nome ou ordinal.You can refer to source and target columns by either name or ordinal. Você também pode misturar referências de coluna por nome e por ordinal na mesma coleção de mapeamentos.You can also mix by-name and by-ordinal column references in the same mappings collection.

Construtores

SqlBulkCopyColumnMapping()

Construtor sem parâmetros que inicializa um novo objeto SqlBulkCopyColumnMapping.Parameterless constructor that initializes a new SqlBulkCopyColumnMapping object.

SqlBulkCopyColumnMapping(Int32, Int32)

Cria um novo mapeamento de colunas, usando ordinais da coluna para se referir a colunas de origem e de destino.Creates a new column mapping, using column ordinals to refer to source and destination columns.

SqlBulkCopyColumnMapping(Int32, String)

Cria um novo mapeamento de coluna, usando um ordinal da coluna para referir-se à coluna de origem e um nome de coluna para a coluna de destino.Creates a new column mapping, using a column ordinal to refer to the source column and a column name for the target column.

SqlBulkCopyColumnMapping(String, Int32)

Cria um novo mapeamento de coluna, usando um nome da coluna para referir-se à coluna de origem e um ordinal da coluna para a coluna de destino.Creates a new column mapping, using a column name to refer to the source column and a column ordinal for the target column.

SqlBulkCopyColumnMapping(String, String)

Cria um novo mapeamento de colunas, usando nomes de coluna para se referir a colunas de origem e de destino.Creates a new column mapping, using column names to refer to source and destination columns.

Propriedades

DestinationColumn

Nome da coluna mapeado na tabela do banco de dados de destino.Name of the column being mapped in the destination database table.

DestinationOrdinal

Valor ordinal da coluna de destino dentro da tabela de destino.Ordinal value of the destination column within the destination table.

SourceColumn

O nome da coluna sendo mapeada na fonte de dados.Name of the column being mapped in the data source.

SourceOrdinal

A posição ordinal da coluna de origem na fonte de dados.The ordinal position of the source column within the data source.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Aplica-se a

Veja também