SqlBulkCopy.BatchSize SqlBulkCopy.BatchSize SqlBulkCopy.BatchSize SqlBulkCopy.BatchSize Property

Definição

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.

public:
 property int BatchSize { int get(); void set(int value); };
public int BatchSize { get; set; }
member this.BatchSize : int with get, set
Public Property BatchSize As Integer

Valor da propriedade

O valor inteiro da propriedade BatchSize, ou zero, se nenhum valor foi definido.The integer value of the BatchSize property, or zero if no value has been set.

Exemplos

O aplicativo de console a seguir demonstra como carregar dados em massa em lotes de 50 linhas.The following console application demonstrates how to bulk load data in batches of 50 rows. Para ver um exemplo ilustrando BatchSize como o funciona com uma transação, consulte operações de cópia em massa e transações.For an example illustrating how BatchSize works with a transaction, see Transaction and Bulk Copy Operations.

Neste exemplo, os dados de origem são lidos primeiro de uma tabela de SQL Server SqlDataReader para uma instância do.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 IDataReader um ou carregada em DataTableum.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- 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.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. 
            // 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";

                // Set the BatchSize.
                bulkCopy.BatchSize = 50;

                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. 
            ' 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"

                ' Set the BatchSize.
                bulkCopy.BatchSize = 50

                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

Um lote é concluído quando BatchSize as linhas são processadas ou não há mais linhas a serem enviadas para a fonte de dados de destino.A batch is complete when BatchSize rows have been processed or there are no more rows to send to the destination data source.

Zero (o padrão) indica que cada WriteToServer operação é um único lote.Zero (the default) indicates that each WriteToServer operation is a single batch.

Se a SqlBulkCopy instância tiver sido declarada UseInternalTransaction sem a opção em vigor, as linhas serão enviadas BatchSize para as linhas do servidor por vez, mas nenhuma ação relacionada à transação será executada.If the SqlBulkCopy instance has been declared without the UseInternalTransaction option in effect, rows are sent to the server BatchSize rows at a time, but no transaction-related action is taken. Se UseInternalTransaction estiver em vigor, cada lote de linhas será inserido como uma transação separada.If UseInternalTransaction is in effect, each batch of rows is inserted as a separate transaction.

A BatchSize propriedade pode ser definida a qualquer momento.The BatchSize property can be set at any time. Se uma cópia em massa já estiver em andamento, o lote atual será dimensionado de acordo com o tamanho do lote anterior.If a bulk copy is already in progress, the current batch is sized according to the previous batch size. Os lotes subsequentes usam o novo tamanho.Subsequent batches use the new size. Se o BatchSize for inicialmente zero e alterado enquanto uma WriteToServer operação já estiver em andamento, essa operação carregará os dados como um único lote.If the BatchSize is initially zero and changed while a WriteToServer operation is already in progress, that operation loads the data as a single batch. Todas as WriteToServer operações subsequentes na SqlBulkCopy mesma instância usam o BatchSizenovo.Any subsequent WriteToServer operations on the same SqlBulkCopy instance use the new BatchSize.

Aplica-se a

Veja também