SqlBulkCopyOptions Enumeration

Definition

Bitweises Kennzeichen, das eine oder mehrere Optionen angibt, die mit einer Instanz von SqlBulkCopy verwendet werden sollen.

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

AllowEncryptedValueModifications 64

Bei Angabe ermöglicht AllowEncryptedValueModifications das Massenkopieren 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.

Gehen Sie beim Angeben von AllowEncryptedValueModifications vorsichtig vor, 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 sind.

CheckConstraints 2

Überprüft Bedingungen während der Einfügung von Daten. Standardmäßig werden Einschränkungen nicht überprüft.

Default 0

Die Standardwerte für alle Optionen verwenden.

FireTriggers 16

Wenn der Wert angegeben wird, wird der Server veranlasst, die Einfügetrigger für die in die Datenbank eingefügten Zeilen auszulösen.

KeepIdentity 1

Die Identitätswerte der Quelltabelle werden beibehalten. Falls nicht angegeben, werden die Identitätswerte vom Ziel zugewiesen.

KeepNulls 8

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

TableLock 4

Für die Dauer des Massenimportvorgangs wird eine Sperre für Massenaktualisierung aktiviert. Falls nicht angegeben, werden Zeilensperren verwendet.

UseInternalTransaction 32

Wenn angegeben, wird jeder Batch des Massenkopiervorgangs innerhalb einer Transaktion verarbeitet. Wenn Sie diese Option und auch ein SqlTransaction-Objekt für den Konstruktor angeben, tritt ein ArgumentException auf.

Beispiele

Die folgende Konsolenanwendung veranschaulicht, wie ein Massenladen ausgeführt wird, bei dem der Wert in der Identitätsspalte der Quelltabelle in die entsprechende Spalte in der Zieltabelle kopiert wird, anstatt einen neuen Wert für die Identitätsspalte jeder Zeile zu generieren.

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

Wichtig

Dieses Beispiel wird nur ausgeführt, wenn Sie die Arbeitstabellen erstellt haben, wie unter Massenkopierbeispielsetup beschrieben. Der angegebene Code dient nur zur Demonstration der Syntax für die Verwendung von SqlBulkCopy. Wenn sich 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;
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>

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: