Compartir a través de


SqlBulkCopyOptions Enumeración

Definición

Marca bit a bit que especifica una o varias opciones que se van a usar con una instancia de SqlBulkCopy.

Esta enumeración admite una combinación bit a bit de sus valores de miembro.

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

Campos

AllowEncryptedValueModifications 64

Cuando se especifica, AllowEncryptedValueModifications permite la copia masiva de datos cifrados entre tablas o bases de datos, sin descifrar los datos. Normalmente, una aplicación seleccionaría datos de las columnas cifradas de una tabla sin descifrar los datos (la aplicación se conectaría a la base de datos con la palabra clave de configuración de cifrado de columnas establecida en deshabilitada) y después usaría esta opción para insertar masivamente los datos, que siguen estando cifrados.

Tenga cuidado al especificar AllowEncryptedValueModifications , ya que esto puede provocar daños en la base de datos porque el controlador no comprueba si los datos están realmente cifrados o si se cifran correctamente con el mismo tipo de cifrado, algoritmo y clave que la columna de destino.

CheckConstraints 2

Comprueba las restricciones mientras se insertan los datos. De forma predeterminada, no se comprueban las restricciones.

Default 0

Usa los valores predeterminados para todas las opciones.

FireTriggers 16

Si se especifican, provoca que el servidor active los desencadenadores de inserción para las filas que se insertan en la base de datos.

KeepIdentity 1

Mantiene los valores de identidad de origen. Si no se especifica, el destino asigna los valores de identidad.

KeepNulls 8

Conserva los valores nulos en la tabla de destino independientemente de la configuración para los valores predeterminados. Si no se especifica, los valores null se reemplazan por valores predeterminados si procede.

TableLock 4

Obtiene un bloqueo de actualización masiva durante toda la operación de copia masiva. Si no se especifica, se usan bloqueos de fila.

UseInternalTransaction 32

Si se especifica, cada lote de la operación de copia masiva tendrá lugar en una transacción. Si indica esta opción y también proporciona un objeto SqlTransaction al constructor, se produce una ArgumentException.

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 en la columna correspondiente de la tabla de destino, en lugar de generar un nuevo valor para la columna de identidad de cada fila.

Para ver cómo cambia la opción de la forma en que funciona la carga masiva, ejecute el ejemplo con dbo. Tabla BulkCopyDemoMatchingColumns vacía. Todas las filas se cargan desde el origen. A continuación, vuelva a ejecutar el ejemplo sin vaciar la tabla. Se produce una excepción y el código escribe un mensaje en la ventana de consola que le notifica que las filas no se agregaron debido a infracciones de clave principal.

Importante

Este ejemplo no se ejecuta a menos que haya creado las tablas de trabajo como se describe en Configuración de ejemplos de copia masiva. Este código se proporciona para mostrar la sintaxis para usar SqlBulkCopy. 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 una instrucción Transact-SQL INSERT … SELECT para copiar los datos.

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>

Comentarios

Puede usar la SqlBulkCopyOptions enumeración al construir una SqlBulkCopy instancia para cambiar el comportamiento de los WriteToServer métodos de esa instancia.

Se aplica a