Aracılığıyla paylaş


SqlBulkCopyOptions Sabit listesi

Tanım

bir örneğiyle SqlBulkCopykullanılacak bir veya daha fazla seçeneği belirten bit düzeyinde bayrak.

Bu sabit listesi, üyeleri için bit düzeyinde karşılaştırmayı destekler.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Devralma
SqlBulkCopyOptions
Öznitelikler

Alanlar

AllowEncryptedValueModifications 64

Belirtildiğinde AllowEncryptedValueModifications , şifrelenmiş verilerin verilerin şifresini çözmeden tablolar veya veritabanları arasında toplu olarak kopyalanmasını sağlar. Genellikle, bir uygulama verilerin şifresini çözmeden bir tablodaki şifrelenmiş sütunlardan verileri seçer (uygulama, sütun şifreleme ayarı anahtar sözcüğü devre dışı olarak ayarlanmış şekilde veritabanına bağlanır) ve ardından verileri toplu olarak eklemek için bu seçeneği kullanır ve yine de şifrelenir. Daha fazla bilgi için bkz. Always Encrypted.

AllowEncryptedValueModifications değerini belirtirken dikkatli olun çünkü bu durum veritabanının bozulmasına neden olabilir çünkü sürücü verilerin gerçekten şifrelenip şifrelenmediğini veya hedef sütunla aynı şifreleme türü, algoritma ve anahtar kullanılarak doğru şekilde şifrelenip şifrelenmediğini denetlemez.

CheckConstraints 2

Veriler eklenirken kısıtlamaları denetleyin. Varsayılan olarak, kısıtlamalar işaretlenmez.

Default 0

Tüm seçenekler için varsayılan değerleri kullanın.

FireTriggers 16

Belirtildiğinde, sunucunun veritabanına eklenen satırlar için ekleme tetikleyicilerini tetiklesine neden olun.

KeepIdentity 1

Kaynak kimlik değerlerini koruyun. Belirtilmediğinde, kimlik değerleri hedef tarafından atanır.

KeepNulls 8

Varsayılan değerlerin ayarlarından bağımsız olarak hedef tablodaki null değerleri koruyun. Belirtilmediğinde, null değerler uygun olduğunda varsayılan değerlerle değiştirilir.

TableLock 4

Toplu kopyalama işlemi süresi boyunca toplu güncelleştirme kilidi alın. Belirtilmediğinde satır kilitleri kullanılır.

UseInternalTransaction 32

Belirtildiğinde, toplu kopyalama işleminin her toplu işlemi bir işlem içinde gerçekleşir. Bu seçeneği belirtir ve oluşturucuya bir SqlTransaction nesnesi de sağlarsanız, bir ArgumentException gerçekleşir.

Örnekler

Aşağıdaki konsol uygulaması, her satırın kimlik sütunu için yeni bir değer oluşturmak yerine kaynak tablonun kimlik sütunundaki değeri hedef tablodaki karşılık gelen sütuna kopyalayan bir toplu yüklemenin nasıl gerçekleştirildiğini gösterir.

Seçeneğin toplu yüklemenin çalışma şeklini nasıl değiştirdiğini görmek için örneği dbo ile çalıştırın. BulkCopyDemoMatchingColumns tablosu boş. Tüm satırlar kaynaktan yüklenir. Ardından, tabloyu boşaltmadan örneği yeniden çalıştırın. Özel durum oluşturulur ve kod konsol penceresine birincil anahtar ihlalleri nedeniyle satırların eklenmediğini bildiren bir ileti yazar.

Önemli

Bu örnek, Toplu Kopyalama Örneği Kurulumu'nda açıklandığı gibi iş tablolarını oluşturmadığınız sürece çalışmaz. Bu kod, yalnızca SqlBulkCopy kullanımına yönelik söz dizimini göstermek için sağlanır. Kaynak ve hedef tablolar aynı SQL Server örneğindeyse, transact-SQL INSERT … SELECT deyimini kullanarak verileri kopyalamak daha kolay ve daha hızlıdır.

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

Açıklamalar

Bir örnek oluştururkenSqlBulkCopy, bu örneğin yöntemlerinin davranışını değiştirmek için numaralandırmayı WriteToServer kullanabilirsinizSqlBulkCopyOptions.

Şunlara uygulanır

Ayrıca bkz.