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.
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
- Ö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.