SqlBulkCopyOptions Enumeração
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sinalizador bit a bit que especifica uma ou mais opções a serem usadas com uma instância de SqlBulkCopy.
Essa enumeração dá suporte a uma combinação bit a bit dos valores de membro.
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 permite a cópia em massa de dados criptografados entre tabelas ou bancos de dados, sem descriptografar os dados. 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. Tenha cuidado ao especificar AllowEncryptedValueModifications , pois isso pode levar a corromper o banco de dados porque o driver não verifica se os dados estão realmente criptografados ou se estão criptografados corretamente usando o mesmo tipo de criptografia, algoritmo e chave que a coluna de destino. |
CheckConstraints | 2 | Verificar restrições enquanto os dados são inseridos. Por padrão, as restrições não são verificadas. |
Default | 0 | Use os valores padrão para todas as opções. |
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. |
KeepIdentity | 1 | Preservar valores de identidade de origem. Quando não são especificados, os valores de identidade são atribuídos pelo destino. |
KeepNulls | 8 | Preservar valores nulos na tabela de destino, independentemente das configurações dos valores padrão. Quando não são especificados, os valores nulos são substituídos por valores padrão, quando aplicável. |
TableLock | 4 | Obter um bloqueio de atualização em massa para a duração da operação de cópia em massa. Quando não são especificados, os bloqueios de linha são usados. |
UseInternalTransaction | 32 | Quando especificado, cada lote da operação de cópia de massa vai ocorrer dentro de uma transação. Se você indicar essa opção e também fornecer um objeto SqlTransaction ao construtor, ocorrerá um ArgumentException. |
Exemplos
O aplicativo de console a seguir demonstra como executar uma carga 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.
Para ver como a opção altera a maneira como o carregamento 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 na janela do console notificando que as linhas não foram adicionadas devido a violações 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 System;
using System.Data;
// <Snippet1>
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;";
}
}
// </Snippet1>
Comentários
Você pode usar a SqlBulkCopyOptions enumeração ao construir uma SqlBulkCopy instância para alterar como os WriteToServer métodos dessa instância se comportam.