Partager via


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 des 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. Pour plus d’informations, consultez Always Encrypted.

Soyez prudent lorsque vous spécifiez AllowEncryptedValueModifications, car cela risque d’endommager la base de données, car le pilote ne case activée 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 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 identité de la table source dans 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.

Pour voir comment l’option change le fonctionnement du chargement en bloc, exécutez l’exemple avec le dbo. Table BulkCopyDemoMatchingColumns vide. Toutes les lignes se chargent à 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 des 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 le même SQL Server instance, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

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’énumération SqlBulkCopyOptions lorsque vous construisez un SqlBulkCopy instance pour modifier le WriteToServer comportement des méthodes de ce instance.

S’applique à

Voir aussi