Partilhar via


SqlBulkCopy Construtores

Definição

Sobrecargas

SqlBulkCopy(SqlConnection)

Inicializa uma nova instância da SqlBulkCopy classe usando a instância aberta especificada de SqlConnection .

SqlBulkCopy(String)

Inicializa e abre uma nova instância de SqlConnection com base no fornecidoconnectionString . O construtor usa SqlConnection para inicializar uma nova instância da classe SqlBulkCopy.

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializa e abre uma nova instância de SqlConnection com base no fornecidoconnectionString . O construtor usa SqlConnection para inicializar uma nova instância da classe SqlBulkCopy. A SqlConnection instância se comporta de acordo com as opções fornecidas no Parâmetro copyOptions.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializa uma nova instância da SqlBulkCopy classe usando a instância aberta existente fornecida de SqlConnection . A SqlBulkCopy instância se comporta de acordo com as opções fornecidas no Parâmetro copyOptions. Se um SqlTransaction não nulo for fornecido, as operações de cópia serão executadas nessa transação.

SqlBulkCopy(SqlConnection)

Inicializa uma nova instância da SqlBulkCopy classe usando a instância aberta especificada de SqlConnection .

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection)

Parâmetros

connection
SqlConnection

A instância de SqlConnection já aberta que será usada para executar a operação de cópia em massa. Se a cadeia de conexão não usarIntegrated Security = true , você pode usar SqlCredential para passar a ID de usuário e a senha com mais segurança do que especificando a ID de usuário e a senha como texto na cadeia de conexão.

Exemplos

O aplicativo de console a seguir demonstra como carregar dados em massa usando uma conexão que já está aberta. Neste exemplo, um SqlDataReader é usado para copiar dados da tabela Production.Product no banco de dados AdventureWorks do SQL Server em uma tabela semelhante no mesmo banco de dados. Este exemplo é para fins de demonstração. Você não usaria SqlBulkCopy para mover dados de uma tabela para outra no mesmo banco de dados em um aplicativo de produção. Observe que os dados de origem não precisam estar localizados em SQL Server; você pode usar qualquer fonte de dados que possa ser lida em um IDataReader ou carregada em um DataTable.

Importante

Essa amostra não será executada, a menos que você tenha criado as tabelas de trabalho conforme descrito em Configuração de exemplo de cópia em massa. Esse código é fornecido para demonstrar a sintaxe para usar somente SqlBulkCopy. Se as tabelas de origem e destino estiverem na mesma instância SQL Server, será mais fácil e rápido usar uma instrução Transact-SQL INSERT … SELECT para copiar os dados.

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

Comentários

Como a conexão já está aberta quando a SqlBulkCopy instância é inicializada, a conexão permanece aberta depois que a SqlBulkCopy instância é fechada. Se o connection argumento for nulo, um ArgumentNullException será gerado.

Aplica-se a

SqlBulkCopy(String)

Inicializa e abre uma nova instância de SqlConnection com base no fornecidoconnectionString . O construtor usa SqlConnection para inicializar uma nova instância da classe SqlBulkCopy.

public:
 SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy (string connectionString);
new Microsoft.Data.SqlClient.SqlBulkCopy : string -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String)

Parâmetros

connectionString
String

A cadeia de caracteres que define a conexão será aberta para uso pela instância SqlBulkCopy. Se a cadeia de conexão não usarIntegrated Security = true , você pode usar SqlBulkCopy(SqlConnection) ou SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) e SqlCredential para passar a ID de usuário e a senha com mais segurança do que especificando a ID de usuário e a senha como texto na cadeia de conexão.

Exceções

Se connectionString for uma cadeia de caracteres vazia, um ArgumentException será gerado.

Exemplos

O aplicativo de console a seguir demonstra como carregar dados em massa usando uma conexão especificada como uma cadeia de caracteres. A conexão é fechada automaticamente quando a SqlBulkCopy instância é fechada. Neste exemplo, os dados de origem são lidos primeiro de uma tabela SQL Server para uma SqlDataReader instância. Os dados de origem não precisam estar localizados em SQL Server; você pode usar qualquer fonte de dados que possa ser lida em um IDataReader ou carregada em um DataTable.

Importante

Essa amostra não será executada, a menos que você tenha criado as tabelas de trabalho conforme descrito em Configuração de exemplo de cópia em massa. Esse código é fornecido para demonstrar a sintaxe para usar somente SqlBulkCopy. Se as tabelas de origem e destino estiverem na mesma instância SQL Server, será mais fácil e rápido usar uma instrução Transact-SQL INSERT … SELECT para copiar os dados.

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.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();

            // Set up the bulk copy object using a connection string. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                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;";
    }
}

Comentários

A conexão é fechada automaticamente no final da operação de cópia em massa. Se connectionString for nulo, um ArgumentNullException será gerado. Se connectionString for uma cadeia de caracteres vazia, um ArgumentException será gerado.

Aplica-se a

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializa e abre uma nova instância de SqlConnection com base no fornecidoconnectionString . O construtor usa SqlConnection para inicializar uma nova instância da classe SqlBulkCopy. A SqlConnection instância se comporta de acordo com as opções fornecidas no Parâmetro copyOptions.

public:
 SqlBulkCopy(System::String ^ connectionString, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy (string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new Microsoft.Data.SqlClient.SqlBulkCopy : string * Microsoft.Data.SqlClient.SqlBulkCopyOptions -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String, copyOptions As SqlBulkCopyOptions)

Parâmetros

connectionString
String

A cadeia de caracteres que define a conexão será aberta para uso pela instância SqlBulkCopy. Se a cadeia de conexão não usarIntegrated Security = true , você pode usar SqlBulkCopy(SqlConnection) ou SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) e SqlCredential para passar a ID de usuário e a senha com mais segurança do que especificando a ID de usuário e a senha como texto na cadeia de conexão.

copyOptions
SqlBulkCopyOptions

Uma combinação de valores da enumeração SqlBulkCopyOptions que determina quais linhas de fonte de dados são copiadas para a tabela de destino.

Exemplos

O aplicativo de console a seguir demonstra como executar uma carga em massa usando uma conexão especificada como uma cadeia de caracteres. Uma opção é definida para usar o valor na coluna de identidade da tabela de origem quando você carrega a tabela de destino. Neste exemplo, os dados de origem são lidos primeiro de uma tabela SQL Server para uma SqlDataReader instância. Cada uma das tabelas de origem e de destino inclui uma coluna Identidade. Por padrão, um novo valor para a coluna Identidade é gerado na tabela de destino para cada linha adicionada. Neste exemplo, uma opção é definida quando a conexão é aberta que força o processo de carregamento em massa a usar os valores de identidade da tabela de origem. Para ver como a opção altera a maneira como a carga em massa funciona, execute o exemplo com o dbo. Tabela BulkCopyDemoMatchingColumns vazia. Todas as linhas são carregadas da origem. Em seguida, execute o exemplo novamente sem esvaziar a tabela. Uma exceção é gerada e o código grava uma mensagem no console notificando você de que as linhas não foram adicionadas devido a violações de restrição de chave primária.

Importante

Essa amostra não será executada, a menos que você tenha criado as tabelas de trabalho conforme descrito em Configuração de exemplo de cópia em massa. Esse código é fornecido para demonstrar a sintaxe para usar somente SqlBulkCopy. Se as tabelas de origem e destino estiverem na mesma instância SQL Server, será mais fácil e rápido usar uma instrução Transact-SQL INSERT … SELECT para copiar os dados.

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.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();

            // Create the SqlBulkCopy object using a connection string 
            // and the KeepIdentity option. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
            {
                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;";
    }
}

Comentários

Você pode obter informações detalhadas sobre todas as opções de cópia em massa no SqlBulkCopyOptions tópico.

Aplica-se a

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializa uma nova instância da SqlBulkCopy classe usando a instância aberta existente fornecida de SqlConnection . A SqlBulkCopy instância se comporta de acordo com as opções fornecidas no Parâmetro copyOptions. Se um SqlTransaction não nulo for fornecido, as operações de cópia serão executadas nessa transação.

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions, Microsoft::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection * Microsoft.Data.SqlClient.SqlBulkCopyOptions * Microsoft.Data.SqlClient.SqlTransaction -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection, copyOptions As SqlBulkCopyOptions, externalTransaction As SqlTransaction)

Parâmetros

connection
SqlConnection

A instância SqlConnection já aberta que será usada para realizar a cópia em massa. Se a cadeia de conexão não usarIntegrated Security = true , você pode usar SqlCredential para passar a ID de usuário e a senha com mais segurança do que especificando a ID de usuário e a senha como texto na cadeia de conexão.

copyOptions
SqlBulkCopyOptions

Uma combinação de valores da enumeração SqlBulkCopyOptions que determina quais linhas de fonte de dados são copiadas para a tabela de destino.

externalTransaction
SqlTransaction

Uma instância SqlTransaction existente na qual a cópia em massa ocorrerá.

Comentários

Se as opções incluirem UseInternalTransaction e o externalTransaction argumento não for nulo, um InvalidArgumentException será gerado.

Para obter exemplos que demonstram como usar SqlBulkCopy em uma transação, consulte Operações de transação e cópia em massa.

Confira também

Aplica-se a