SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions Enum

Definizione

Flag bit per bit che specifica una o più opzioni da usare con un'istanza di SqlBulkCopy.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Questa enumerazione ha un attributo FlagsAttribute che consente una combinazione bit per bit dei valori del relativo membro.

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

Campi

AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications 64

Se specificato, AllowEncryptedValueModifications consente la copia di tipo bulk dei dati crittografati tra le tabelle o i database, senza la decrittografia dei dati.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. In genere, un'applicazione selezionerebbe i dati dalle colonne crittografate di una tabella senza decrittografare i dati (l'app si connetterebbe al database con la parola chiave per l'impostazione di crittografia della colonna impostata su disabilitato) e quindi userebbe questa opzione per l'inserimento bulk dei dati, ancora crittografati.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. Per altre informazioni, vedere Always Encrypted.For more information, see Always Encrypted.

Prestare attenzione quando si specifica AllowEncryptedValueModifications, poiché ciò potrebbe danneggiare il database dal momento che il driver non verifica se i dati sono effettivamente crittografati o se sono crittografati in modo corretto usando lo stesso tipo, algoritmo e chiave di crittografia della colonna di destinazione.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 CheckConstraints CheckConstraints CheckConstraints 2

Controllare i vincoli durante l'inserimento dei dati.Check constraints while data is being inserted. Per impostazione predefinita, i vincoli non vengono controllati.By default, constraints are not checked.

Default Default Default Default 0

Usare i valori predefiniti per tutte le opzioni.Use the default values for all options.

FireTriggers FireTriggers FireTriggers FireTriggers 16

Se specificati, il server genera i trigger di inserimento per le righe inserite nel database.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity KeepIdentity KeepIdentity KeepIdentity 1

Mantenere i valori Identity di origine.Preserve source identity values. Se omesso, i valori Identity vengono assegnati dalla destinazione.When not specified, identity values are assigned by the destination.

KeepNulls KeepNulls KeepNulls KeepNulls 8

Mantenere i valori null nella tabella di destinazione indipendentemente dalle impostazioni per i valori predefiniti.Preserve null values in the destination table regardless of the settings for default values. Se omessi, i valori null vengono sostituiti dai valori predefiniti quando possibile.When not specified, null values are replaced by default values where applicable.

TableLock TableLock TableLock TableLock 4

Ottenere un blocco dell'aggiornamento in blocco per la durata dell'operazione di copia di massa.Obtain a bulk update lock for the duration of the bulk copy operation. Se omesso, vengono usati i blocchi righe.When not specified, row locks are used.

UseInternalTransaction UseInternalTransaction UseInternalTransaction UseInternalTransaction 32

Se specificati, ogni batch dell'operazione di copia di massa verrà eseguito nell'ambito di una transazione.When specified, each batch of the bulk-copy operation will occur within a transaction. Se si indica questa opzione e si fornisce un oggetto SqlTransaction al costruttore, si avrà un ArgumentException.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Esempi

L'applicazione console seguente viene illustrato come eseguire un caricamento bulk che consente di copiare il valore della colonna identity della tabella di origine nella colonna corrispondente nella tabella di destinazione, anziché generare un nuovo valore per colonna identity ogni riga della.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.

Per vedere come l'opzione Cambia il modo il funzionamento del caricamento bulk, eseguire l'esempio con il dbo. BulkCopyDemoMatchingColumns tabella vuota.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Tutte le righe vengono caricate dall'origine.All rows load from the source. Successivamente, eseguire nuovamente l'esempio senza svuotare la tabella.Next, run the sample again without emptying the table. Viene generata un'eccezione e il codice scrive un messaggio alla finestra della console che informa che non sono state aggiunte righe a causa di violazioni di chiave primaria.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

In questo esempio non funzionerà a meno che non sono state create le tabelle di lavoro come descritto in esempio di copia di massa.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Questo codice viene fornito per illustrare la sintassi per usare SqlBulkCopy solo.This code is provided to demonstrate the syntax for using SqlBulkCopy only. Se le tabelle di origine e destinazione sono nella stessa istanza di SQL Server, è più semplice e rapido usare Transact-SQL INSERT … SELECT istruzione per copiare i dati.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

Commenti

È possibile usare il SqlBulkCopyOptions enumerazione quando si costruisce un SqlBulkCopy istanza per modificare il modo in WriteToServer si comportano i metodi per l'istanza.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

Si applica a

Vedi anche