SqlBulkCopy SqlBulkCopy SqlBulkCopy SqlBulkCopy Class

Definição

Permite um carregamento em massa eficiente de uma tabela do SQL Server com os dados de outra fonte. Lets you efficiently bulk load a SQL Server table with data from another source.

public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
    interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
Herança
SqlBulkCopySqlBulkCopySqlBulkCopySqlBulkCopy
Implementações

Exemplos

O aplicativo de console a seguir demonstra como carregar dados usando o SqlBulkCopy classe.The following console application demonstrates how to load data using the SqlBulkCopy class. Neste exemplo, uma SqlDataReader é usado para copiar dados do Production. Product tabela no SQL Server AdventureWorks banco de dados em uma tabela semelhante no mesmo banco de dados.In this example, a SqlDataReader is used to copy data from the Production.Product table in the SQL Server AdventureWorks database to a similar table in the same database.

Importante

Este exemplo não será executado, a menos que você criou 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 para usar SqlBulkCopy somente.This code is provided to demonstrate the syntax for using SqlBulkCopy only. Se as tabelas de origem e destino estiverem na mesma instância do SQL Server, é mais fácil e rápido para usar um Transact-SQL INSERT … SELECT instrução 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.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;";
    }
}
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.BulkCopyDemoMatchingColumns;", _
                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

            ' 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 destinationConnection As SqlConnection = _
                New SqlConnection(connectionString)
                destinationConnection.Open()

                ' Set up the bulk copy object. 
                ' 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 bulkCopy As SqlBulkCopy = _
                  New SqlBulkCopy(destinationConnection)
                    bulkCopy.DestinationTableName = _
                    "dbo.BulkCopyDemoMatchingColumns"

                    Try
                        ' Write from the source to the destination.
                        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 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

Microsoft SQL Server inclui um utilitário de prompt de comando popular chamado bcp à movimentação de dados de uma tabela para outra, seja em um único servidor ou entre servidores.Microsoft SQL Server includes a popular command-prompt utility named bcp for moving data from one table to another, whether on a single server or between servers. O SqlBulkCopy classe permite escrever soluções de código gerenciado que fornecem funcionalidade semelhante.The SqlBulkCopy class lets you write managed code solutions that provide similar functionality. Há outras maneiras de carregar dados em uma tabela do SQL Server (instruções de inserção, por exemplo), mas SqlBulkCopy oferece uma vantagem de desempenho significativa sobre eles.There are other ways to load data into a SQL Server table (INSERT statements, for example), but SqlBulkCopy offers a significant performance advantage over them.

O SqlBulkCopy classe pode ser usado para gravar dados somente em tabelas do SQL Server.The SqlBulkCopy class can be used to write data only to SQL Server tables. No entanto, a fonte de dados não é limitada ao SQL Server; qualquer fonte de dados pode ser usada, desde que os dados podem ser carregados para um DataTable da instância ou de leitura com um IDataReader instância.However, the data source is not limited to SQL Server; any data source can be used, as long as the data can be loaded to a DataTable instance or read with a IDataReader instance.

SqlBulkCopy falhará quando o carregamento em massa uma DataTable coluna de tipo SqlDateTime em um SQL Server cujo tipo é um dos tipos de data/hora a coluna adicionada no SQL Server 2008.SqlBulkCopy will fail when bulk loading a DataTable column of type SqlDateTime into a SQL Server column whose type is one of the date/time types added in SQL Server 2008.

Construtores

SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection)

Inicializa uma nova instância da classe SqlBulkCopy usando a instância de SqlConnection aberta especificada. Initializes a new instance of the SqlBulkCopy class using the specified open instance of SqlConnection.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializa uma nova instância da classe SqlBulkCopy usando a instância aberta existente fornecida do SqlConnection. Initializes a new instance of the SqlBulkCopy class using the supplied existing open instance of SqlConnection. A instância SqlBulkCopy se comporta de acordo com as opções fornecidas no parâmetro copyOptions. The SqlBulkCopy instance behaves according to options supplied in the copyOptions parameter. Se um SqlTransaction não nulo for fornecido, as operações de cópia serão executadas nessa transação. If a non-null SqlTransaction is supplied, the copy operations will be performed within that transaction.

SqlBulkCopy(String) SqlBulkCopy(String) SqlBulkCopy(String) SqlBulkCopy(String)

Inicializa e abre uma nova instância de SqlConnection com base no connectionString fornecido. Initializes and opens a new instance of SqlConnection based on the supplied connectionString. O construtor usa o SqlConnection para inicializar uma nova instância da classe SqlBulkCopy. The constructor uses the SqlConnection to initialize a new instance of the SqlBulkCopy class.

SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializa e abre uma nova instância de SqlConnection com base no connectionString fornecido. Initializes and opens a new instance of SqlConnection based on the supplied connectionString. O construtor usa SqlConnection para inicializar uma nova instância da classe SqlBulkCopy. The constructor uses that SqlConnection to initialize a new instance of the SqlBulkCopy class. A instância SqlConnection se comporta de acordo com as opções fornecidas no parâmetro copyOptions. The SqlConnection instance behaves according to options supplied in the copyOptions parameter.

Propriedades

BatchSize BatchSize BatchSize BatchSize

Número de linhas em cada lote. Number of rows in each batch. No final de cada lote, as linhas no lote são enviadas ao servidor. At the end of each batch, the rows in the batch are sent to the server.

BulkCopyTimeout BulkCopyTimeout BulkCopyTimeout BulkCopyTimeout

Número de segundos para que a operação seja concluída antes de atingir o tempo limite. Number of seconds for the operation to complete before it times out.

ColumnMappings ColumnMappings ColumnMappings ColumnMappings

Retorna uma coleção de itens SqlBulkCopyColumnMapping. Returns a collection of SqlBulkCopyColumnMapping items. Mapeamentos de coluna definem as relações entre colunas na fonte de dados e colunas no destino. Column mappings define the relationships between columns in the data source and columns in the destination.

DestinationTableName DestinationTableName DestinationTableName DestinationTableName

Nome da tabela de destino no servidor. Name of the destination table on the server.

EnableStreaming EnableStreaming EnableStreaming EnableStreaming

Habilita ou desabilita um objeto SqlBulkCopy a transmitir dados de um objeto IDataReader Enables or disables a SqlBulkCopy object to stream data from an IDataReader object

NotifyAfter NotifyAfter NotifyAfter NotifyAfter

Define o número de linhas a serem processadas antes de gerar um evento de notificação. Defines the number of rows to be processed before generating a notification event.

Métodos

Close() Close() Close() Close()

Fecha a instância SqlBulkCopy. Closes the SqlBulkCopy instance.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() ToString()

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

(Inherited from Object)
WriteToServer(DataRow[]) WriteToServer(DataRow[]) WriteToServer(DataRow[]) WriteToServer(DataRow[])

Copia todas as linhas da matriz DataRow fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. Copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DataTable) WriteToServer(DataTable) WriteToServer(DataTable) WriteToServer(DataTable)

Copia todas as linhas no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. Copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState)

Copia apenas linhas que correspondem ao estado de linha fornecido no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. Copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DbDataReader) WriteToServer(DbDataReader) WriteToServer(DbDataReader) WriteToServer(DbDataReader)

Copia todas as linhas da matriz DbDataReader fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. Copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(IDataReader) WriteToServer(IDataReader) WriteToServer(IDataReader) WriteToServer(IDataReader)

Copia todas as linhas no IDataReader fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. Copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[])

A versão assíncrona do WriteToServer(DataRow[]), que copia todas as linhas da matriz DataRow fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataRow[]), which copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken)

A versão assíncrona do WriteToServer(DataRow[]), que copia todas as linhas da matriz DataRow fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataRow[]), which copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. O token de cancelamento pode ser usado para solicitar que a operação seja abandonada antes de expirar o tempo limite do comando. The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. As exceções serão relatadas por meio do objeto de tarefa. Exceptions will be reported via the returned Task object.

WriteToServerAsync(DataTable) WriteToServerAsync(DataTable) WriteToServerAsync(DataTable) WriteToServerAsync(DataTable)

A versão assíncrona de WriteToServer(DataTable), que copia todas as linhas no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataTable), which copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken)

A versão assíncrona de WriteToServer(DataTable), que copia todas as linhas no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataTable), which copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. O token de cancelamento pode ser usado para solicitar que a operação seja abandonada antes de expirar o tempo limite do comando. The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. As exceções serão relatadas por meio do objeto de tarefa. Exceptions will be reported via the returned Task object.

WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState)

A versão assíncrona de WriteToServer(DataTable, DataRowState), que copia apenas linhas que correspondem ao estado de linha fornecido no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataTable, DataRowState), which copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken)

A versão assíncrona de WriteToServer(DataTable, DataRowState), que copia apenas linhas que correspondem ao estado de linha fornecido no DataTable fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DataTable, DataRowState), which copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. O token de cancelamento pode ser usado para solicitar que a operação seja abandonada antes de expirar o tempo limite do comando. The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. As exceções serão relatadas por meio do objeto de tarefa. Exceptions will be reported via the returned Task object.

WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader)

A versão assíncrona do WriteToServer(DbDataReader), que copia todas as linhas da matriz DbDataReader fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DbDataReader), which copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken)

A versão assíncrona do WriteToServer(DbDataReader), que copia todas as linhas da matriz DbDataReader fornecida para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(DbDataReader), which copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader)

A versão assíncrona de WriteToServer(IDataReader), que copia todas as linhas no IDataReader fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(IDataReader), which copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken)

A versão assíncrona de WriteToServer(IDataReader), que copia todas as linhas no IDataReader fornecido para uma tabela de destino especificada pela propriedade DestinationTableName do objeto SqlBulkCopy. The asynchronous version of WriteToServer(IDataReader), which copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. O token de cancelamento pode ser usado para solicitar que a operação seja abandonada antes de expirar o tempo limite do comando. The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. As exceções serão relatadas por meio do objeto de tarefa. Exceptions will be reported via the returned Task object.

Eventos

SqlRowsCopied SqlRowsCopied SqlRowsCopied SqlRowsCopied

Ocorre sempre que o número de linhas especificado pela propriedade NotifyAfter foram processadas. Occurs every time that the number of rows specified by the NotifyAfter property have been processed.

Implantações explícitas de interface

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

Libera todos os recursos usados pela instância atual da classe SqlBulkCopy. Releases all resources used by the current instance of the SqlBulkCopy class.

Aplica-se a

Veja também