SqlBulkCopyOptions Sabit listesi
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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.