Condividi tramite


SqlBulkCopyColumnMapping Classe

Definizione

Definisce il mapping tra una colonna dell'origine dati dell'istanza SqlBulkCopy e una colonna della tabella di destinazione dell'istanza.

public ref class SqlBulkCopyColumnMapping sealed
public sealed class SqlBulkCopyColumnMapping
type SqlBulkCopyColumnMapping = class
Public NotInheritable Class SqlBulkCopyColumnMapping
Ereditarietà
SqlBulkCopyColumnMapping

Esempio

L'esempio seguente esegue la copia bulk di dati da una tabella di origine nel database di esempio AdventureWorks a una tabella di destinazione nello stesso database. Anche se il numero di colonne nella destinazione corrisponde al numero di colonne nell'origine e ogni colonna di destinazione si trova nella stessa posizione ordinale della colonna di origine corrispondente, i nomi delle colonne non corrispondono. SqlBulkCopyColumnMapping gli oggetti vengono usati per creare una mappa delle colonne per la copia bulk.

Importante

Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione dell'esempio di copia bulk. Il codice viene fornito solo per illustrare la sintassi relativa all'uso di SqlBulkCopy. Se le tabelle di origine e di destinazione si trovano nella stessa istanza di SQL Server, è più semplice e veloce usare un'istruzione Transact-SQL INSERT … SELECT per copiare i dati.

using System;
using System.Data;
using Microsoft.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 mapNumber =
                    new SqlBulkCopyColumnMapping("ProductNumber", "ProdNum");
                bulkCopy.ColumnMappings.Add(mapNumber);

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

Commenti

I mapping delle colonne definiscono il mapping tra l'origine dati e la tabella di destinazione.

Se i mapping non sono definiti, ovvero la ColumnMappings raccolta è vuota, le colonne vengono mappate in modo implicito in base alla posizione ordinale. Per il corretto funzionamento, gli schemi di origine e di destinazione devono corrispondere. In caso contrario, verrà generata un'eccezione InvalidOperationException .

Se la ColumnMappings raccolta non è vuota, non è necessario specificare tutte le colonne presenti nell'origine dati. Quelli non mappati dalla raccolta vengono ignorati.

È possibile fare riferimento alle colonne di origine e di destinazione in base al nome o alla posizione ordinale. È anche possibile combinare riferimenti a colonne per nome e per ordinale nella stessa raccolta di mapping.

Costruttori

SqlBulkCopyColumnMapping()

Costruttore senza parametri che inizializza un nuovo oggetto SqlBulkCopyColumnMapping.

SqlBulkCopyColumnMapping(Int32, Int32)

Crea un nuovo mapping di colonna, utilizzando gli ordinali di colonna per fare riferimento alle colonne di origine e destinazione.

SqlBulkCopyColumnMapping(Int32, String)

Crea un nuovo mapping di colonna, utilizzando un ordinale di colonna per fare riferimento alla colonna di origine e un nome di colonna per la colonna di destinazione.

SqlBulkCopyColumnMapping(String, Int32)

Crea un nuovo mapping di colonna, utilizzando un nome di colonna per fare riferimento alla colonna di origine e un ordinale di colonna per la colonna di destinazione.

SqlBulkCopyColumnMapping(String, String)

Crea un nuovo mapping di colonna, utilizzando i nomi di colonna per fare riferimento alle colonne di origine e destinazione.

Proprietà

DestinationColumn

Nome della colonna da mappare nella tabella del database di destinazione.

DestinationOrdinal

Valore ordinale della colonna di destinazione all'interno della tabella di destinazione.

SourceColumn

Nome della colonna da mappare nell'origine dati.

SourceOrdinal

Posizione ordinale della colonna di origine all'interno dell'origine dati.

Si applica a