Sprache

SqlBulkCopyOptions Enumeration

Definition

Bitweise Kennzeichnung, die eine oder mehrere Optionen angibt, die mit einer Instanz von SqlBulkCopyverwendet werden sollen.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.

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

Felder

Name Wert Beschreibung
Default 0

Verwenden Sie die Standardwerte für alle Optionen.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

KeepIdentity 1

Die Identitätswerte der Quelle werden beibehalten. Wenn nicht angegeben, werden identitätswerte vom Ziel zugewiesen.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

CheckConstraints 2

Einschränkungen beim Einfügen von Daten prüfen. Standardmäßig werden Einschränkungen nicht überprüft.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

TableLock 4

Fordert für die Dauer des Massenkopiervorgangs eine Sperre für Massenaktualisierungen an. Wenn nicht angegeben, werden Zeilensperren verwendet.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

KeepNulls 8

NULL-Werte in der Zieltabelle werden beibehalten, unabhängig von der Einstellung für Standardwerte. Wenn nicht angegeben, werden NULL-Werte ggf. durch Standardwerte ersetzt.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

FireTriggers 16

Wenn angegeben, löst der Server die Einfügetrigger für die Zeilen aus, die in die Datenbank eingefügt werden.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

UseInternalTransaction 32

Wenn angegeben, erfolgt jeder Batch des Massenkopievorgangs innerhalb einer Transaktion. Wenn Sie diese Option angeben und dem Konstruktor auch ein SqlTransaction Objekt bereitstellen, tritt ein ArgumentException .

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

AllowEncryptedValueModifications 64

Bei Angabe ermöglicht AllowEncryptedValueModifications das Massenkopien verschlüsselter Daten zwischen Tabellen oder Datenbanken, ohne die Daten zu entschlüsseln. Normalerweise würde eine Anwendung Daten aus verschlüsselten Spalten aus einer Tabelle auswählen, ohne die Daten zu entschlüsseln. Die App würde eine Verbindung zur Datenbank herstellen, und das Spaltenverschlüsselungseinstellungsschlüsselwort wäre auf „deaktiviert“ festgelegt. Dann würde die Anwendung diese Option zum Masseneinfügen der Daten verwenden, die noch verschlüsselt wären. Weitere Informationen finden Sie unter Always Encrypted.

Verwenden Sie Vorsicht, wenn Sie AllowEncryptedValueModifications angeben, da dies zu einer Beschädigung der Datenbank führen kann, da der Treiber nicht überprüft, ob die Daten tatsächlich verschlüsselt sind oder ob sie ordnungsgemäß mit demselben Verschlüsselungstyp, Algorithmus und Schlüssel wie die Zielspalte verschlüsselt ist.

Verwenden Sie für die neue Entwicklung Microsoft. Data.SqlClient. Diese Seite dokumentiert System.Data.SqlClient.

Beispiele

Die folgende Konsolenanwendung veranschaulicht, wie Sie eine Massenlast durchführen, die den Wert in der Identitätsspalte der Quelltabelle in die entsprechende Spalte in der Zieltabelle kopiert, anstatt einen neuen Wert für die Identitätsspalte jeder Zeile zu generieren.

Um zu sehen, wie die Option die Funktionsweise des Massenladevorgangs ändert, führen Sie das Beispiel mit dem dbo aus. BulkCopyDemoMatchingColumns-Tabelle leer. Alle Zeilen werden aus der Quelle geladen. Führen Sie anschließend das Beispiel erneut aus, ohne die Tabelle zu leeren. Eine Ausnahme wird ausgelöst, und der Code schreibt eine Nachricht in das Konsolenfenster, in der Sie darüber informiert werden, dass Zeilen aufgrund von Primärschlüsselverletzungen nicht hinzugefügt wurden.

Important

Dieses Beispiel wird nur ausgeführt, wenn Sie die Arbeitstabellen zuvor wie unter Beispiel für die Einrichtung des Massenkopierens beschrieben erstellt haben. Der angegebene Code dient nur zur Demonstration der Syntax für die Verwendung von SqlBulkCopy. Wenn sich die Quell- und Zieltabellen in derselben SQL Server-Instanz befinden, ist es einfacher und schneller, eine Transact-SQL-Anweisung INSERT … SELECT zum Kopieren der Daten zu verwenden.

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

Sie können die SqlBulkCopyOptions Enumeration verwenden, wenn Sie eine SqlBulkCopy Instanz erstellen, um das Verhalten der WriteToServer Methoden für diese Instanz zu ändern.

Gilt für:

Siehe auch