SqlBulkCopy Construtores

Definição

Inicializa uma nova instância da classe SqlBulkCopy.Initializes a new instance of the SqlBulkCopy class.

Sobrecargas

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

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.

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

public:
 SqlBulkCopy(System::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy (System.Data.SqlClient.SqlConnection connection);
new System.Data.SqlClient.SqlBulkCopy : System.Data.SqlClient.SqlConnection -> System.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.The already open SqlConnection instance that will be used to perform the bulk copy operation. Se a cadeia de conexão não usar Integrated Security = true, você poderá 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.If your connection string does not use Integrated Security = true, you can use SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

Exemplos

O aplicativo de console a seguir demonstra como carregar dados em massa usando uma conexão que já está aberta.The following console application demonstrates how to bulk load data using a connection that is already open. Neste exemplo, um SqlDataReader é usado para copiar dados da tabela de produção. Product no banco SQL Server dados AdventureWorks para 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. Este exemplo tem fins apenas demonstrativos.This example is for demonstration purposes only. Você não usará SqlBulkCopy para mover dados de uma tabela para outra no mesmo banco de dado em um aplicativo de produção.You would not use SqlBulkCopy to move data from one table to another in the same database in a production application. 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 para um DataTable.Note that the source data does not have to be located on SQL Server; you can use any data source that can be read to an IDataReader or loaded to a DataTable.

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-SQL INSERT … SELECT 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 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

Como a conexão já está aberta quando a instância SqlBulkCopy é inicializada, a conexão permanece aberta depois que a instância SqlBulkCopy é fechada.Because the connection is already open when the SqlBulkCopy instance is initialized, the connection remains open after the SqlBulkCopy instance is closed.

Se o argumento connection for nulo, um ArgumentNullException será gerado.If the connection argument is null, an ArgumentNullException is thrown.

Veja também

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.

public:
 SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy (string connectionString);
new System.Data.SqlClient.SqlBulkCopy : string -> System.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.The string defining the connection that will be opened for use by the SqlBulkCopy instance. Se a cadeia de conexão não usar Integrated Security = true, você poderá 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.If your connection string does not use Integrated Security = true, you can use SqlBulkCopy(SqlConnection) or SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) and SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

Exemplos

O aplicativo de console a seguir demonstra como carregar dados em massa usando uma conexão especificada como uma cadeia de caracteres.The following console application demonstrates how to bulk load data by using a connection specified as a string. A conexão é fechada automaticamente quando a instância SqlBulkCopy é fechada.The connection is automatically closed when the SqlBulkCopy instance is closed.

Neste exemplo, os dados de origem são lidos primeiro de uma tabela de SQL Server para uma instância SqlDataReader.In this example, the source data is first read from a SQL Server table to a SqlDataReader instance. 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 para um DataTable.The source data does not have to be located on SQL Server; you can use any data source that can be read to an IDataReader or loaded to a DataTable.

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-SQL INSERT … SELECT 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();

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

            ' 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 bulkCopy As SqlBulkCopy = New SqlBulkCopy(connectionString)
                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 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

A conexão é fechada automaticamente no final da operação de cópia em massa.The connection is automatically closed at the end of the bulk copy operation.

Se connectionString for NULL, um ArgumentNullException será gerado.If connectionString is null, an ArgumentNullException is thrown. Se connectionString for uma cadeia de caracteres vazia, um ArgumentException será gerado.If connectionString is an empty string, an ArgumentException is thrown.

Veja também

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.

public:
 SqlBulkCopy(System::String ^ connectionString, System::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy (string connectionString, System.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new System.Data.SqlClient.SqlBulkCopy : string * System.Data.SqlClient.SqlBulkCopyOptions -> System.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.The string defining the connection that will be opened for use by the SqlBulkCopy instance. Se a cadeia de conexão não usar Integrated Security = true, você poderá 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.If your connection string does not use Integrated Security = true, you can use SqlBulkCopy(SqlConnection) or SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) and SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

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.A combination of values from the SqlBulkCopyOptions enumeration that determines which data source rows are copied to the destination table.

Exemplos

O aplicativo de console a seguir demonstra como executar um carregamento em massa usando uma conexão especificada como uma cadeia de caracteres.The following console application demonstrates how to perform a bulk load by using a connection specified as a string. Uma opção é definida para usar o valor na coluna identidade da tabela de origem quando você carrega a tabela de destino.An option is set to use the value in the identity column of the source table when you load the destination table. Neste exemplo, os dados de origem são lidos primeiro de uma tabela de SQL Server para uma instância SqlDataReader.In this example, the source data is first read from a SQL Server table to a SqlDataReader instance. A tabela de origem e a tabela de destino incluem uma coluna de identidade.The source table and destination table each include an Identity column. Por padrão, um novo valor para a coluna de identidade é gerado na tabela de destino para cada linha adicionada.By default, a new value for the Identity column is generated in the destination table for each row added. Neste exemplo, uma opção é definida quando a conexão é aberta, o que força o processo de carregamento em massa a usar os valores de identidade da tabela de origem.In this example, an option is set when the connection is opened that forces the bulk load process to use the Identity values from the source table instead. Para ver como a opção muda a maneira como o carregamento em massa funciona, execute o exemplo com o dbo. Tabela BulkCopyDemoMatchingColumns vazia.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Todas as linhas são carregadas da origem.All rows load from the source. Em seguida, execute o exemplo novamente sem esvaziar a tabela.Then run the sample again without emptying the table. Uma exceção é lançada e o código grava uma mensagem no console notificando que as linhas não foram adicionadas devido a violações de restrição de chave primária.An exception is thrown and the code writes a message to the console notifying you that rows weren't added because of primary key constraint violations.

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-SQL INSERT … SELECT 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();

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

            ' 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 bulkCopy As SqlBulkCopy = _
              New SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)
                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 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

Você pode obter informações detalhadas sobre todas as opções de cópia em massa no tópico SqlBulkCopyOptions.You can obtain detailed information about all the bulk copy options in the SqlBulkCopyOptions topic.

Veja também

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.

public:
 SqlBulkCopy(System::Data::SqlClient::SqlConnection ^ connection, System::Data::SqlClient::SqlBulkCopyOptions copyOptions, System::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy (System.Data.SqlClient.SqlConnection connection, System.Data.SqlClient.SqlBulkCopyOptions copyOptions, System.Data.SqlClient.SqlTransaction externalTransaction);
new System.Data.SqlClient.SqlBulkCopy : System.Data.SqlClient.SqlConnection * System.Data.SqlClient.SqlBulkCopyOptions * System.Data.SqlClient.SqlTransaction -> System.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.The already open SqlConnection instance that will be used to perform the bulk copy. Se a cadeia de conexão não usar Integrated Security = true, você poderá 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.If your connection string does not use Integrated Security = true, you can use SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

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.A combination of values from the SqlBulkCopyOptions enumeration that determines which data source rows are copied to the destination table.

externalTransaction
SqlTransaction

Uma instância SqlTransaction existente na qual a cópia em massa ocorrerá.An existing SqlTransaction instance under which the bulk copy will occur.

Comentários

Se as opções incluírem UseInternalTransaction e o argumento externalTransaction não for nulo, um InvalidArgumentException será gerado.If options include UseInternalTransaction and the externalTransaction argument is not null, an InvalidArgumentException is thrown.

Para obter exemplos que demonstram como usar SqlBulkCopy em uma transação, consulte operações de cópia em massa e transações.For examples demonstrating how to use SqlBulkCopy in a transaction, see Transaction and Bulk Copy Operations.

Veja também

Aplica-se a