SqlBulkCopyOptions Sabit listesi

Tanım

SqlBulkCopyörneğiyle kullanı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

Name Değer Description
Default 0

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

KeepIdentity 1

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

CheckConstraints 2

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

TableLock 4

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

KeepNulls 8

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

FireTriggers 16

Belirtildiğinde, veritabanına eklenen satırlar için sunucunun ekleme tetikleyicilerini tetiklemesini sağlayın.

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 nesne de sağlarsanız, bir ArgumentException oluşur.

AllowEncryptedValueModifications 64

Belirtildiğinde AllowEncryptedValueModifications , verilerin şifresini çözmeden şifrelenmiş verilerin 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 bu seçenek hala şifrelenmiştir.

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.

CacheMetadata 128

Belirtildiğinde, CacheMetadata ilk toplu kopyalama işleminden sonra hedef tablo meta verilerini önbelleğe alır ve sonraki işlemlerin aynı tabloya meta veri bulma sorgusunu atlanmasını sağlar. Bu, aynı hedef tabloya birden çok toplu kopyalama işlemi gerçekleştirirken performansı artırabilir.

Uyarı: Bu seçeneği yalnızca hedef tablo şemasının toplu kopyalama işlemleri arasında değişmeyecek olduğundan emin olduğunuzda kullanın. Tablo şeması değişirse (eklenen, kaldırılan veya değiştirilen sütunlar), önbelleğe alınmış meta verilerin kullanılması veri bozulmasına, başarısız işlemlere veya beklenmeyen davranışlara neden olabilir. Şema değişirse önbelleği temizlemek için çağrısı ClearCachedMetadata() yapın.

Önbellek, farklı bir tabloya değiştirildiğinde DestinationTableName otomatik olarak geçersiz kılınır. önbelleğe alınan meta veriler kaynak-hedef sütun eşlemesini değil, yalnızca hedef tablo şemasını açıkladığı için işlemler arasında değişiklik ColumnMappings yapmak önbellek geçersiz kılınması gerektirmez.

Bağlantı bağlamı değiştiğinde önbellek otomatik olarak geçersiz kılınmıyor. Temel alınan SqlConnection veritabanı değişirse (örneğin, aracılığıyla ChangeDatabase(String)) veya yük devretme nedeniyle farklı bir sunucuya yeniden bağlanırsa, çağıranların meta verilerin yenilendiğinden emin olmak için çağrısı ClearCachedMetadata() yapması gerekir.

Ö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 ilgili sütuna kopyalayan bir toplu yükleme gerçekleştirmeyi 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.

Important

Bu örnek, Toplu Kopyalama Örneği Kurulumubölümünde açıklandığı gibi çalışma tablolarını oluşturmadığınız sürece çalışmaz. Bu kod, yalnızca SqlBulkCopy'yi kullanmaya yönelik söz dizimini göstermek için sağlanır. Kaynak ve hedef tablolar aynı SQL Server örneğindeyse, verileri kopyalamak için Transact-SQL INSERT … SELECT deyimi kullanmak daha kolay ve daha hızlıdır.

namespace SqlBulkCopy_KeepIdentity;

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>

Açıklamalar

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

Şunlara uygulanır