SqlBulkCopyOptions Enum

Definitie

Bitwise-vlag waarmee een of meer opties worden opgegeven die moeten worden gebruikt met een exemplaar van SqlBulkCopy.

Deze opsomming ondersteunt een bitsgewijze combinatie van de waarden van de leden.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Overname
SqlBulkCopyOptions
Kenmerken

Velden

Name Waarde Description
Default 0

Gebruik de standaardwaarden voor alle opties.

KeepIdentity 1

Bronidentiteitswaarden behouden. Wanneer deze niet is opgegeven, worden identiteitswaarden toegewezen door de bestemming.

CheckConstraints 2

Controleer beperkingen terwijl gegevens worden ingevoegd. Standaard worden beperkingen niet gecontroleerd.

TableLock 4

Verkrijg een bulkupdatevergrendeling voor de duur van de bulkkopiebewerking. Wanneer dit niet is opgegeven, worden rijvergrendelingen gebruikt.

KeepNulls 8

Behoud null-waarden in de doeltabel, ongeacht de instellingen voor standaardwaarden. Wanneer deze niet is opgegeven, worden null-waarden vervangen door standaardwaarden, indien van toepassing.

FireTriggers 16

Wanneer dit is opgegeven, zorgt u ervoor dat de server de invoegtriggers activeert voor de rijen die in de database worden ingevoegd.

UseInternalTransaction 32

Wanneer deze is opgegeven, vindt elke batch van de bulkkopiebewerking plaats binnen een transactie. Als u deze optie aangeeft en ook een object aan de constructor opgeeft, treedt er een SqlTransactionArgumentException op.

AllowEncryptedValueModifications 64

Wanneer dit is opgegeven, maakt AllowEncryptedValueModifications bulksgewijs kopiëren van versleutelde gegevens tussen tabellen of databases mogelijk, zonder de gegevens te ontsleutelen. Normaal gesproken selecteert een toepassing gegevens uit versleutelde kolommen uit één tabel zonder de gegevens te ontsleutelen (de app maakt verbinding met de database met het trefwoord voor kolomversleuteling ingesteld op uitgeschakeld) en gebruikt vervolgens deze optie om de gegevens bulksgewijs in te voegen, wat nog steeds is versleuteld. Zie Always Encrypted voor meer informatie.

Wees voorzichtig bij het opgeven van AllowEncryptedValueModifications , omdat dit kan leiden tot beschadigde database omdat het stuurprogramma niet controleert of de gegevens inderdaad zijn versleuteld of als deze correct zijn versleuteld met hetzelfde versleutelingstype, algoritme en sleutel als de doelkolom.

Voorbeelden

De volgende consoletoepassing laat zien hoe u een bulksgewijs laadt waarmee de waarde in de identiteitskolom van de brontabel wordt gekopieerd naar de bijbehorende kolom in de doeltabel, in plaats van een nieuwe waarde te genereren voor de identiteitskolom van elke rij.

Als u wilt zien hoe de optie de manier wijzigt waarop de bulkbelasting werkt, voert u het voorbeeld uit met de dbo. De tabel BulkCopyDemoMatchingColumns leeg. Alle rijen worden uit de bron geladen. Voer vervolgens het voorbeeld opnieuw uit zonder de tabel leeg te maken. Er wordt een uitzondering gegenereerd en de code schrijft een bericht naar het consolevenster met de melding dat er geen rijen zijn toegevoegd vanwege schendingen van de primaire sleutel.

Important

Dit voorbeeld wordt niet uitgevoerd tenzij u de werktabellen hebt gemaakt, zoals beschreven in Bulk Copy Voorbeeldconfiguratie. Deze code wordt verstrekt om alleen de syntaxis voor het gebruik van SqlBulkCopy te demonstreren. Als de bron- en doeltabellen zich in hetzelfde SQL Server exemplaar bevinden, is het eenvoudiger en sneller om een Transact-SQL INSERT … SELECT-instructie te gebruiken om de gegevens te kopiëren.

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

Opmerkingen

U kunt de SqlBulkCopyOptions opsomming gebruiken wanneer u een SqlBulkCopy exemplaar maakt om te wijzigen hoe de WriteToServer methoden voor dat exemplaar zich gedragen.

Van toepassing op

Zie ook