SqlBulkCopyOptions Énumération

Définition

Indicateur de bits qui spécifie une ou plusieurs options à utiliser avec une instance de SqlBulkCopy.

Cette énumération prend en charge une combinaison au niveau du bit de ses valeurs membres.

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

Champs

AllowEncryptedValueModifications 64

Lorsqu’il est spécifié, AllowEncryptedValueModifications permet la copie en bloc de données chiffrées entre des tables ou des bases de données, sans déchiffrer les données. En règle générale, une application sélectionne les données à partir de colonnes chiffrées d’une table sans déchiffrer les données (elle se connecte à la base de données avec le mot-clé de paramètre de chiffrement de colonne défini sur « Enabled »), puis utilise cette option pour insérer les données en bloc, qui sont toujours chiffrées.

Soyez prudent lorsque vous spécifiez AllowEncryptedValueModifications , car cela peut endommager la base de données, car le pilote ne vérifie pas si les données sont effectivement chiffrées ou si elles sont correctement chiffrées à l’aide du même type de chiffrement, de l’algorithme et de la même clé que la colonne cible.

CheckConstraints 2

Vérifie les contraintes pendant l'insertion des données. Par défaut, les contraintes ne sont pas vérifiées.

Default 0

Utilise les valeurs par défaut pour toutes les options.

FireTriggers 16

Si spécifié, entraîne l'exécution par le serveur des déclencheurs d'insertion pour les lignes insérées dans la base de données.

KeepIdentity 1

Conserve les valeurs d'identité sources. Quand cette option n'est pas spécifiée, les valeurs d'identité sont assignées par la destination.

KeepNulls 8

Conserve les valeurs null dans la table de destination, indépendamment des paramètres des valeurs par défaut. 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.

TableLock 4

Obtient un verrou de mise à jour en bloc pour la durée de l'opération de copie en bloc. Quand cette option n'est pas spécifiée, des verrous de ligne sont utilisés.

UseInternalTransaction 32

Si spécifié, chaque lot de l'opération de copie en bloc se produit dans une transaction. Si vous indiquez cette option et fournissez également un objet SqlTransaction au constructeur, ArgumentException se produit.

Exemples

L’application console suivante montre comment effectuer un chargement en bloc qui copie la valeur de la colonne d’identité de la table source dans la colonne correspondante de la table de destination, au lieu de générer une nouvelle valeur pour la colonne d’identité de chaque ligne.

Pour voir comment l’option change le fonctionnement du chargement en masse, exécutez l’exemple avec le dbo. Table BulkCopyDemoMatchingColumns vide. Toutes les lignes sont chargées à partir de la source. Ensuite, réexécutez l’exemple sans vider la 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.

Important

Cet exemple ne s’exécutera que si vous avez créé les tables de travail comme décrit dans Configuration de l’exemple de copie en bloc. Ce code est fourni uniquement pour illustrer la syntaxe de l’utilisation de SqlBulkCopy. Si les tables source et de destination se trouvent dans la même instance SQL Server, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

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>

Remarques

Vous pouvez utiliser l’énumération SqlBulkCopyOptions lorsque vous construisez une SqlBulkCopy instance pour modifier le WriteToServer comportement des méthodes de cette instance.

S’applique à