SqlBulkCopyOptions Enumerazione

Definizione

Flag bit per bit che specifica una o più opzioni da usare con un'istanza di SqlBulkCopy.

Questa enumerazione supporta una combinazione bit per bit dei rispettivi valori dei membri.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Ereditarietà
SqlBulkCopyOptions
Attributi

Campi

AllowEncryptedValueModifications 64

Se specificato, AllowEncryptedValueModifications consente la copia bulk di dati crittografati tra tabelle o database, senza decrittografare i dati. Solitamente un'applicazione seleziona i dati dalle colonne crittografate di un'unica tabella senza decrittografarli (l'app si connette al database con la parola chiave di impostazione della crittografia delle colonne impostata sullo stato disabilitato) e quindi usa questa opzione per eseguire l'inserimento bulk dei dati che sono ancora crittografati.

Prestare attenzione quando si specifica AllowEncryptedValueModifications perché potrebbe causare il danneggiamento del database perché il driver non controlla se i dati sono effettivamente crittografati o se vengono crittografati correttamente usando lo stesso tipo di crittografia, algoritmo e chiave della colonna di destinazione.

CheckConstraints 2

Controllare i vincoli durante l'inserimento dei dati. Per impostazione predefinita, i vincoli non vengono controllati.

Default 0

Usare i valori predefiniti per tutte le opzioni.

FireTriggers 16

Se specificato, il server genera i trigger di inserimento per le righe da inserire nel database.

KeepIdentity 1

Mantenere i valori Identity di origine. Se omesso, i valori Identity vengono assegnati dalla destinazione.

KeepNulls 8

Mantenere i valori null nella tabella di destinazione indipendentemente dalle impostazioni per i valori predefiniti. Se omessi, i valori null vengono sostituiti dai valori predefiniti quando possibile.

TableLock 4

Ottenere un blocco di aggiornamento bulk per la durata dell'operazione di copia bulk. Se omesso, vengono usati i blocchi righe.

UseInternalTransaction 32

Se specificato, ogni batch dell'operazione di copia bulk viene eseguito all'interno di una transazione. Se si indica questa opzione e si fornisce un oggetto SqlTransaction al costruttore, si avrà un ArgumentException.

Esempio

L'applicazione console seguente illustra come eseguire un caricamento bulk che copia il valore nella colonna identity della tabella di origine nella colonna corrispondente nella tabella di destinazione, anziché generare un nuovo valore per la colonna identity di ogni riga.

Per vedere come l'opzione modifica il funzionamento del carico bulk, eseguire l'esempio con il dbo. Tabella BulkCopyDemoMatchingColumns vuota. Tutte le righe vengono caricate dall'origine. Eseguire quindi di nuovo l'esempio senza svuotare la tabella. Viene generata un'eccezione e il codice scrive un messaggio nella finestra della console che informa che le righe non sono state aggiunte a causa di violazioni della chiave primaria.

Importante

Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione di esempio di copia bulk. Il codice viene fornito solo per illustrare la sintassi relativa all'uso di SqlBulkCopy. Se le tabelle di origine e di destinazione si trovano nella stessa istanza di SQL Server, è più semplice e veloce usare un'istruzione Transact-SQL INSERT … SELECT per copiare i dati.

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>

Commenti

È possibile usare l'enumerazione quando si costruisce un'istanza SqlBulkCopy per modificare il SqlBulkCopyOptions comportamento dei WriteToServer metodi per tale istanza.

Si applica a