SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions Enum

Definición

Marca bit a bit que especifica una o varias opciones que se van a usar con una instancia de SqlBulkCopy.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Esta enumeración tiene el atributo FlagsAttribute, que permite una combinación bit a bit de sus valores de miembro.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Herencia
SqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptions
Atributos

Campos

AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications 64

Cuando se especifica, AllowEncryptedValueModifications permite la copia masiva de datos cifrados entre tablas o bases de datos, sin descifrar los datos.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. Normalmente, una aplicación puede seleccionar datos de columnas cifradas de una tabla sin descifrar los datos (la aplicación debe conectarse a la base de datos con la palabra clave de configuración de cifrado de columna establecida en deshabilitado) y, a continuación, usar esta opción para insertar de forma masiva los datos, que siguen estando cifrados.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. Para obtener más información, vea Always Encrypted.For more information, see Always Encrypted.

Tenga precaución al especificar AllowEncryptedValueModifications ya que puede provocar daños en la base de datos porque el controlador no comprueba si realmente se cifran los datos, o si se cifran correctamente usando el mismo tipo de cifrado, algoritmo y clave como columna de destino.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

Comprueba las restricciones mientras se insertan los datos.Check constraints while data is being inserted. De forma predeterminada, no se comprueban las restricciones.By default, constraints are not checked.

Default Default Default Default 0

Usa los valores predeterminados para todas las opciones.Use the default values for all options.

FireTriggers FireTriggers FireTriggers FireTriggers 16

Si se especifica, hace que el servidor active los desencadenadores de inserción para las filas que se insertan en la base de datos.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity KeepIdentity KeepIdentity KeepIdentity 1

Mantiene los valores de identidad de origen.Preserve source identity values. Si no se especifica, el destino asigna los valores de identidad.When not specified, identity values are assigned by the destination.

KeepNulls KeepNulls KeepNulls KeepNulls 8

Conserva valores null en la tabla de destino independientemente de la configuración de los valores predeterminados.Preserve null values in the destination table regardless of the settings for default values. Si no se especifica, los valores null se reemplazan por valores predeterminados si procede.When not specified, null values are replaced by default values where applicable.

TableLock TableLock TableLock TableLock 4

Obtiene un bloqueo de actualización masiva durante la operación de copia masiva.Obtain a bulk update lock for the duration of the bulk copy operation. Si no se especifica, se usan bloqueos de fila.When not specified, row locks are used.

UseInternalTransaction UseInternalTransaction UseInternalTransaction UseInternalTransaction 32

Si se especifica, cada lote de la operación de copia masiva se producirá en una transacción.When specified, each batch of the bulk-copy operation will occur within a transaction. Si indica esta opción y también proporciona un objeto SqlTransaction al constructor, se produce una ArgumentException.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Ejemplos

La siguiente aplicación de consola muestra cómo realizar una carga masiva que copia el valor de la columna de identidad de la tabla de origen a la columna correspondiente en la tabla de destino, en lugar de generar un nuevo valor para la columna de identidad de cada fila.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.

Para ver cómo la opción cambia la manera las obras de carga masiva, ejecute el ejemplo con el dbo. BulkCopyDemoMatchingColumns tabla vacía.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Todas las filas que se cargan desde el origen.All rows load from the source. A continuación, ejecute de nuevo el ejemplo sin vaciar la tabla.Next, run the sample again without emptying the table. Se produce una excepción y el código escribe un mensaje en la ventana de consola que le notifica que no se han agregado las filas debido a infracciones de clave principal.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

En este ejemplo no se ejecutará a menos que haya creado las tablas de trabajo como se describe en configuración de ejemplo de copia masiva.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Este código se proporciona para mostrar la sintaxis para usar SqlBulkCopy solo.This code is provided to demonstrate the syntax for using SqlBulkCopy only. Si las tablas de origen y destino están en la misma instancia de SQL Server, es más fácil y rápido usar Transact-SQL INSERT … SELECT instrucción para copiar los datos.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

Comentarios

Puede usar el SqlBulkCopyOptions enumeración cuando se construye un SqlBulkCopy instancia para cambiar el modo WriteToServer se comportan los métodos de esa instancia.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

Se aplica a

Consulte también: