SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions Enum

Definition

Bitweises Kennzeichen, das eine oder mehrere Optionen angibt, die mit einer Instanz von SqlBulkCopy verwendet werden sollen.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Diese Enumeration weist ein FlagsAttribute-Attribut auf, die eine bitweise Kombination der Memberwerte zulässt.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Vererbung
SqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptions
Attribute

Felder

AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications 64

Falls angegeben, ermöglicht AllowEncryptedValueModifications einen Massenkopiervorgang von verschlüsselten Daten zwischen Tabellen oder Datenbanken ohne Entschlüsselung der Daten.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. Normalerweise würde eine Anwendung Daten von verschlüsselten Spalten aus einer Tabelle auswählen, ohne die Daten zu entschlüsseln (die App würde eine Verbindung mit der Datenbank mit deaktivierter Einstellung für das Schlüsselwort für die Spaltenverschlüsselung herstellen) und dann diese Option verwenden, um einen Masseneinfügevorgang der immer noch verschlüsselten Daten vorzunehmen.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. Weitere Informationen finden Sie unter Always Encrypted.For more information, see Always Encrypted.

Gehen Sie bei der Angabe von AllowEncryptedValueModifications umsichtig vor, da dies zur Beschädigung der Datenbank führen kann, denn der Treiber überprüft nicht, ob die Daten tatsächlich oder ordnungsgemäß mit dem gleichen Verschlüsselungstyp, Algorithmus und Schlüssel wie die Zielspalte verschlüsselt sind.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

Einschränkungen überprüfen, während Daten eingefügt werden.Check constraints while data is being inserted. Standardmäßig werden Einschränkungen nicht überprüft.By default, constraints are not checked.

Default Default Default Default 0

Die Standardwerte für alle Optionen verwenden.Use the default values for all options.

FireTriggers FireTriggers FireTriggers FireTriggers 16

Bewirkt, falls angegeben, dass der Server die Insert-Trigger für die in die Datenbank eingefügten Zeilen auslöst.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity KeepIdentity KeepIdentity KeepIdentity 1

Quellidentitätswerte beibehalten.Preserve source identity values. Falls nicht angegeben, werden die Identitätswerte vom Ziel zugewiesen.When not specified, identity values are assigned by the destination.

KeepNulls KeepNulls KeepNulls KeepNulls 8

NULL-Werte in der Zieltabelle unabhängig von den Einstellungen für Standardwerte beibehalten.Preserve null values in the destination table regardless of the settings for default values. Falls nicht angegeben, werden NULL-Werte ggf. durch Standardwerte ersetzt.When not specified, null values are replaced by default values where applicable.

TableLock TableLock TableLock TableLock 4

Eine Massenaktualisierungssperre für die Dauer des Massenkopiervorgangs aktivieren.Obtain a bulk update lock for the duration of the bulk copy operation. Falls nicht angegeben, werden Zeilensperren verwendet.When not specified, row locks are used.

UseInternalTransaction UseInternalTransaction UseInternalTransaction UseInternalTransaction 32

Falls angegeben, tritt jedes Batch des Massenkopiervorgangs innerhalb einer Transaktion auf.When specified, each batch of the bulk-copy operation will occur within a transaction. Wenn Sie diese Option und auch ein SqlTransaction-Objekt für den Konstruktor angeben, tritt ein ArgumentException auf.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Beispiele

Die folgenden Konsolenanwendung wird veranschaulicht, wie Sie einen Massenladevorgang auszuführen, der den Wert in die Identity-Spalte der Quelltabelle, auf die entsprechende Spalte in der Zieltabelle, anstatt einen neuen Wert für jede Zeile der Identity-Spalte kopiert wird.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.

Um festzustellen, wie die Option die Funktionsweise des Bulk Load, führen Sie das Beispiel mit ändert die Dbo. "BulkCopyDemoMatchingColumns" Tabelle leer.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Alle Zeilen aus der Quelle geladen werden.All rows load from the source. Als Nächstes führen Sie das Beispiel erneut ohne die Tabelle zu leeren.Next, run the sample again without emptying the table. Eine Ausnahme wird ausgelöst, und der Code schreibt eine Meldung im Konsolenfenster, das Sie darüber informiert, dass Zeilen nicht aufgrund von primary Key-Verletzungen hinzugefügt wurden.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.

Wichtig

In diesem Beispiel wird nicht ausgeführt werden, es sei denn, Sie die Arbeitstabellen erstellt haben, wie in beschrieben Einrichtung der Massenkopierbeispiele.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Dieser Code wird bereitgestellt, um zu veranschaulichen die Syntax für die Verwendung von "SqlBulkCopy" nur.This code is provided to demonstrate the syntax for using SqlBulkCopy only. Wenn die Quelle und Ziel-Tabellen in der gleichen SQL Server-Instanz ist, ist es einfacher und schneller mit einer Transact-SQL INSERT … SELECT Anweisung, um die Daten zu kopieren.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

Hinweise

Können Sie die SqlBulkCopyOptions Enumeration, die beim Erstellen einer SqlBulkCopy Instanz ändern wie die WriteToServer Verhalten der Methoden für diese Instanz.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

Gilt für:

Siehe auch