SqlBulkCopyOptions Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Flag bit per bit che specifica una o più opzioni da usare con un'istanza di SqlBulkCopy.
Questa enumerazione supporta una combinazione bit per bit dei rispettivi valori dei membri.
public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions =
Public Enum SqlBulkCopyOptions
- Ereditarietà
- Attributi
Campi
AllowEncryptedValueModifications | 64 | Se specificato, AllowEncryptedValueModifications consente la copia bulk di dati crittografati tra tabelle o database, senza decrittografare i dati. Solitamente un'applicazione seleziona i dati dalle colonne crittografate di un'unica tabella senza decrittografarli (l'app si connette al database con la parola chiave di impostazione della crittografia delle colonne impostata sullo stato disabilitato) e quindi usa questa opzione per eseguire l'inserimento bulk dei dati che sono ancora crittografati. Per altre informazioni, vedere Always Encrypted. Prestare attenzione quando si specifica AllowEncryptedValueModifications perché ciò può causare il danneggiamento del database perché il driver non verifica se i dati sono effettivamente crittografati o se sono crittografati correttamente usando lo stesso tipo di crittografia, algoritmo e chiave della colonna di destinazione. |
CheckConstraints | 2 | Controllare i vincoli durante l'inserimento dei dati. Per impostazione predefinita, i vincoli non vengono controllati. |
Default | 0 | Usare i valori predefiniti per tutte le opzioni. |
FireTriggers | 16 | Se specificato, il server genera i trigger di inserimento per le righe da inserire nel database. |
KeepIdentity | 1 | Mantenere i valori Identity di origine. Se omesso, i valori Identity vengono assegnati dalla destinazione. |
KeepNulls | 8 | Mantenere i valori null nella tabella di destinazione indipendentemente dalle impostazioni per i valori predefiniti. Se omessi, i valori null vengono sostituiti dai valori predefiniti quando possibile. |
TableLock | 4 | Ottenere un blocco di aggiornamento bulk per la durata dell'operazione di copia bulk. Se omesso, vengono usati i blocchi righe. |
UseInternalTransaction | 32 | Se specificato, ogni batch dell'operazione di copia bulk viene eseguito all'interno di una transazione. Se si indica questa opzione e si fornisce un oggetto SqlTransaction al costruttore, si avrà un ArgumentException. |
Esempio
L'applicazione console seguente illustra come eseguire un caricamento bulk che copia il valore nella colonna Identity della tabella di origine nella colonna corrispondente nella tabella di destinazione, anziché generare un nuovo valore per la colonna Identity di ogni riga.
Per vedere come l'opzione modifica il funzionamento del caricamento bulk, eseguire l'esempio con dbo. Tabella BulkCopyDemoMatchingColumns vuota. Tutte le righe vengono caricate dall'origine. Eseguire quindi di nuovo l'esempio senza svuotare la tabella. Viene generata un'eccezione e il codice scrive un messaggio nella finestra della console che informa che le righe non sono state aggiunte a causa di violazioni della chiave primaria.
Importante
Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione dell'esempio di copia bulk. Il codice viene fornito solo per illustrare la sintassi relativa all'uso di SqlBulkCopy. Se le tabelle di origine e di destinazione si trovano nella stessa istanza di SQL Server, è più semplice e veloce usare un'istruzione Transact-SQL INSERT … SELECT
per copiare i dati.
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
Commenti
È possibile usare l'enumerazione quando si costruisce un'istanza SqlBulkCopyOptionsSqlBulkCopy per modificare il comportamento dei WriteToServer metodi per tale istanza.