SqlBulkCopyOptions Enumeração

Definição

Sinalizador bit a bit que especifica uma ou mais opções a serem usadas com uma instância de SqlBulkCopy.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Esta enumeração tem um atributo FlagsAttribute que permite uma combinação bit a bit dos valores membros dela.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Herança
SqlBulkCopyOptions
Atributos

Campos

AllowEncryptedValueModifications 64

Quando especificado, AllowEncryptedValueModifications habilita a cópia em massa de dados criptografados entre tabelas ou bancos de dados, sem descriptografá-los.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. Normalmente, um aplicativo selecionaria dados de colunas criptografadas de uma tabela sem descriptografar os dados (o aplicativo se conectaria ao banco de dados com a palavra-chave de configuração de criptografia de coluna definida como desabilitada) e, em seguida, usaria essa opção para inserção em massa dos dados, que ainda estariam criptografado.Typically, an application would select data from encrypted columns from one table without decrypting the data (the app would connect to the database with the column encryption setting keyword set to disabled) and then would use this option to bulk insert the data, which is still encrypted. Para obter mais informações, consulte Always Encrypted.For more information, see Always Encrypted.

Tenha cuidado ao especificar AllowEncryptedValueModifications , pois isso pode causar a corrupção do banco de dados, pois o driver não verifica se os dados são realmente criptografados ou se são criptografados corretamente usando o mesmo tipo de criptografia, algoritmo e chave que a coluna de destino.Use caution when specifying AllowEncryptedValueModifications as this may lead to corrupting the database because the driver does not check if the data is indeed encrypted, or if it is correctly encrypted using the same encryption type, algorithm and key as the target column.

CheckConstraints 2

Verificar restrições enquanto os dados são inseridos.Check constraints while data is being inserted. Por padrão, as restrições não são verificadas.By default, constraints are not checked.

Default 0

Use os valores padrão para todas as opções.Use the default values for all options.

FireTriggers 16

Quando especificados, fazem com que o servidor dispare gatilhos de inserção para as linhas que estão sendo inseridas no banco de dados.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity 1

Preservar valores de identidade de origem.Preserve source identity values. Quando não são especificados, os valores de identidade são atribuídos pelo destino.When not specified, identity values are assigned by the destination.

KeepNulls 8

Preservar valores nulos na tabela de destino, independentemente das configurações dos valores padrão.Preserve null values in the destination table regardless of the settings for default values. Quando não são especificados, os valores nulos são substituídos por valores padrão, quando aplicável.When not specified, null values are replaced by default values where applicable.

TableLock 4

Obter um bloqueio de atualização em massa para a duração da operação de cópia em massa.Obtain a bulk update lock for the duration of the bulk copy operation. Quando não são especificados, os bloqueios de linha são usados.When not specified, row locks are used.

UseInternalTransaction 32

Quando especificado, cada lote da operação de cópia de massa vai ocorrer dentro de uma transação.When specified, each batch of the bulk-copy operation will occur within a transaction. Se você indicar essa opção e também fornecer um objeto SqlTransaction ao construtor, ocorrerá um ArgumentException.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Exemplos

O aplicativo de console a seguir demonstra como executar um carregamento em massa que copia o valor na coluna de identidade da tabela de origem para a coluna correspondente na tabela de destino, em vez de gerar um novo valor para a coluna de identidade de cada linha.The following console application demonstrates how to perform a bulk load that copies the value in the identity column of the source table to the corresponding column in the destination table, instead of generating a new value for each row's identity column.

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.Next, run the sample again without emptying the table. Uma exceção é lançada e o código grava uma mensagem na janela do console notificando que as linhas não foram adicionadas devido a violações de chave primária.An exception is thrown, and the code writes a message to the console window notifying you that rows were not added because of primary key 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 para usar somente 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 usar a SqlBulkCopyOptions enumeração ao construir uma SqlBulkCopy instância para alterar a forma como os WriteToServer métodos para essa instância se comportam.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

Aplica-se a