SqlBulkCopyOptions Énumération

Définition

Indicateur de bits qui spécifie une ou plusieurs options à utiliser avec une instance de SqlBulkCopy.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Cette énumération a un attribut FlagsAttribute qui permet une combinaison au niveau du bit de ses valeurs membres.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Héritage
SqlBulkCopyOptions
Attributs

Champs

AllowEncryptedValueModifications 64

Quand l’option AllowEncryptedValueModifications est spécifiée, elle autorise la copie en bloc de données chiffrées entre des tables ou des bases de données, sans déchiffrer les données.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. En règle générale, une application sélectionne les données dans les colonnes chiffrées d’une table sans les déchiffrer (l’application se connecte à la base de données avec le mot clé du paramètre de chiffrement de colonne défini sur désactivé) et utilise ensuite cette option pour insérer en bloc les données, qui sont toujours chiffrées.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. Pour plus d’informations, consultez Always Encrypted.For more information, see Always Encrypted.

Spécifiez AllowEncryptedValueModifications avec précaution, car il existe un risque d’altération de la base de données. En effet, le pilote ne vérifie pas si les données sont réellement chiffrées ni si elles le sont correctement en utilisant les mêmes type de chiffrement, algorithme et clé que la colonne cible.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

Vérifie les contraintes pendant l'insertion des données.Check constraints while data is being inserted. Par défaut, les contraintes ne sont pas vérifiées.By default, constraints are not checked.

Default 0

Utilise les valeurs par défaut pour toutes les options.Use the default values for all options.

FireTriggers 16

Quand cette option est spécifiée, le serveur déclenche les déclencheurs d'insertion pour les lignes en cours d'insertion dans la base de données.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity 1

Conserve les valeurs d'identité sources.Preserve source identity values. Quand cette option n'est pas spécifiée, les valeurs d'identité sont assignées par la destination.When not specified, identity values are assigned by the destination.

KeepNulls 8

Conserve des valeurs null dans la table de destination quels que soient les paramètres pour les valeurs par défaut.Preserve null values in the destination table regardless of the settings for default values. Quand cette option n'est pas spécifiée, les valeurs null sont remplacées par les valeurs par défaut, s'il y a lieu.When not specified, null values are replaced by default values where applicable.

TableLock 4

Obtient un verrou de mise à jour en bloc pour la durée de l'opération de copie en blocObtain a bulk update lock for the duration of the bulk copy operation. Quand cette option n'est pas spécifiée, des verrous de ligne sont utilisés.When not specified, row locks are used.

UseInternalTransaction 32

Quand cette option est spécifiée, chaque lot de l’opération de copie en bloc aura lieu dans une transaction.When specified, each batch of the bulk-copy operation will occur within a transaction. Si vous indiquez cette option et fournissez également un objet SqlTransaction au constructeur, ArgumentException se produit.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Exemples

L’application console suivante montre comment effectuer un chargement en masse qui copie la valeur dans la colonne d’identité de la table source vers la colonne correspondante dans la table de destination, au lieu de générer une nouvelle valeur pour la colonne d’identité de chaque ligne.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.

Pour voir comment l’option modifie le mode de fonctionnement du chargement en masse, exécutez l’exemple avec le dbo. Table BulkCopyDemoMatchingColumns vide.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Toutes les lignes sont chargées à partir de la source.All rows load from the source. Ensuite, exécutez à nouveau l’exemple sans vider la table.Next, run the sample again without emptying the table. Une exception est levée et le code écrit un message dans la fenêtre de console, vous informant que les lignes n’ont pas été ajoutées en raison de violations de clé primaire.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.

Important

Cet exemple ne s’exécute pas, sauf si vous avez créé les tables de travail comme décrit dans l' exemple de configuration de copie en bloc.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Ce code est fourni pour illustrer la syntaxe de l’utilisation de SqlBulkCopy uniquement.This code is provided to demonstrate the syntax for using SqlBulkCopy only. Si les tables source et de destination se trouvent dans la même instance de SQL Server, il est plus facile et plus rapide d' INSERT … SELECT utiliser une instruction Transact-SQL pour copier les données.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

Remarques

Vous pouvez utiliser l' SqlBulkCopyOptions énumération lorsque vous construisez une SqlBulkCopy instance pour modifier WriteToServer la façon dont les méthodes de cette instance se comportent.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

S’applique à

Voir aussi