SqlBulkCopy Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ermöglicht den effizienten Massenladevorgang einer SQL Server-Tabelle mit Daten aus einer anderen Quelle.
public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
- Vererbung
-
SqlBulkCopy
- Implementiert
Beispiele
Die folgende Konsolenanwendung zeigt das Laden von Daten mithilfe der Klasse SqlBulkCopy. In diesem Beispiel werden in der SQL Server-Datenbank AdventureWorks unter Verwendung von SqlDataReader Daten aus der Tabelle Production.Product in eine ähnliche Tabelle derselben Datenbank kopiert.
Wichtig
Dieses Beispiel wird nur ausgeführt, wenn Sie die Arbeitstabellen zuvor wie unter Massenkopierbeispiel-Einrichtung beschrieben erstellt haben.
Der angegebene Code dient nur zur Demonstration der Syntax für die Verwendung von SqlBulkCopy. Wenn sich quell- und zieltabellen im gleichen SQL Server instance befinden, ist es einfacher und schneller, eine Transact-SQL-Anweisung INSERT … SELECT
zum Kopieren der Daten zu verwenden.
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();
// Open the destination connection. In the real world you would
// not use SqlBulkCopy to move data from one table to the other
// in the same database. This is for demonstration purposes only.
using (SqlConnection destinationConnection =
new SqlConnection(connectionString))
{
destinationConnection.Open();
// Set up the bulk copy object.
// Note that the column positions in the source
// data reader match the column positions in
// the destination table so there is no need to
// map columns.
using (SqlBulkCopy bulkCopy =
new SqlBulkCopy(destinationConnection))
{
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;";
}
}
Hinweise
Microsoft SQL Server enthält ein beliebtes Eingabeaufforderungshilfsprogramm namens bcp zum Verschieben von Daten aus einer Tabelle in eine andere, egal ob auf einem einzelnen Server oder zwischen Servern. Mit SqlBulkCopy der -Klasse können Sie lösungen für verwalteten Code schreiben, die ähnliche Funktionen bereitstellen. Es gibt eine Reihe weiterer Verfahren, Daten in eine SQL Server-Tabelle zu laden (beispielsweise INSERT-Anweisungen), aber SqlBulkCopy bietet im Vergleich einen erheblichen Leistungsvorteil. Die SqlBulkCopy-Klasse kann nur zum Schreiben von Daten in SQL Server-Tabellen verwendet werden. Die Datenquelle ist jedoch nicht auf SQL Server beschränkt. Jede Datenquelle kann verwendet werden, solange die Daten in ein DataTable instance geladen oder mit einem IDataReader instance gelesen werden können. SqlBulkCopyschlägt fehl, wenn eine DataTable Spalte vom Typ SqlDateTime massenweise in eine SQL Server Spalte geladen wird, deren Typ einer der in SQL Server 2008 hinzugefügten Datums-/Uhrzeittypen ist.
Konstruktoren
SqlBulkCopy(SqlConnection) |
Initialisiert eine neue instance der SqlBulkCopy -Klasse unter Verwendung des angegebenen offenen instance von SqlConnection . |
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Initialisiert eine neue instance der SqlBulkCopy -Klasse unter Verwendung der bereitgestellten vorhandenen offenen instance von SqlConnection . Die SqlBulkCopy instance verhält sich entsprechend den optionen, die im |
SqlBulkCopy(String) |
Initialisiert und öffnet eine neue instance von SqlConnection basierend auf der angegebenen |
SqlBulkCopy(String, SqlBulkCopyOptions) |
Initialisiert und öffnet eine neue instance von SqlConnection basierend auf der angegebenen |
Eigenschaften
BatchSize |
Anzahl der Zeilen in jedem Batch. Am Ende jedes Batches werden die im Batch enthaltenen Zeilen an den Server gesendet. |
BulkCopyTimeout |
Anzahl der Sekunden zum Abschließen des Vorgangs, bevor ein Timeout auftritt. |
ColumnMappings |
Gibt eine Auflistung von SqlBulkCopyColumnMapping-Elementen zurück. Spaltenzuordnungen definieren die Beziehungen zwischen Spalten in der Datenquelle und den Spalten im Ziel. |
ColumnOrderHints |
Gibt eine Auflistung von SqlBulkCopyColumnOrderHint-Elementen zurück. Hinweise zur Spaltenreihenfolge beschreiben die Sortierreihenfolge der Spalten im gruppierten Index der Zieltabelle. |
DestinationTableName |
Name der Zieltabelle auf dem Server. |
EnableStreaming |
Aktiviert oder deaktiviert ein SqlBulkCopy-Objekt zum Streamen von Daten aus einem IDataReader-Objekt |
NotifyAfter |
Definiert die Anzahl der Zeilen, die verarbeitet werden, bevor ein Benachrichtigungsereignis generiert wird. |
RowsCopied |
Die Anzahl der Zeilen, die im laufenden Massenkopiervorgang verarbeitet werden. |
RowsCopied64 |
Die Anzahl der Zeilen, die im laufenden Massenkopiervorgang verarbeitet werden. |
Methoden
Close() |
Hiermit wird die SqlBulkCopy-Instanz geschlossen. |
WriteToServer(DataRow[]) |
Kopiert alle Zeilen aus dem angegebenen DataRow-Array in eine Zieltabelle, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. |
WriteToServer(DataTable) |
Hiermit werden alle Zeilen in der angegebenen DataTable in eine Zieltabelle kopiert, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts festgelegt wird. |
WriteToServer(DataTable, DataRowState) |
Kopiert nur die Zeilen, die dem angegebenen Zeilenstatus in der bereitgestellten DataTable entsprechen, in eine Zieltabelle, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. |
WriteToServer(DbDataReader) |
Kopiert alle Zeilen aus dem angegebenen DbDataReader-Array in eine Zieltabelle, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. |
WriteToServer(IDataReader) |
Hiermit werden alle Zeilen in der angegebenen IDataReader in eine Zieltabelle kopiert, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts festgelegt wird. |
WriteToServerAsync(DataRow[]) |
Die asynchrone Version von WriteToServer(DataRow[]), mit der alle Zeilen aus dem bereitgestellten DataRow-Array in eine Zieltabelle kopiert werden, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. |
WriteToServerAsync(DataRow[], CancellationToken) |
Die asynchrone Version von WriteToServer(DataRow[]), mit der alle Zeilen aus dem bereitgestellten DataRow-Array in eine Zieltabelle kopiert werden, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. Das Abbruchtoken kann verwendet werden, um anzufordern, dass der Vorgang abgebrochen wird, bevor das Timeout des Befehls abläuft. Ausnahmen werden über das zurückgegebene Aufgabenobjekt gemeldet. |
WriteToServerAsync(DataTable) |
Eine asynchrone Version von WriteToServer(DataTable), die alle Zeilen in das bereitgestellte DataTable-Array in eine Zieltabelle kopiert, die von der DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben wird. |
WriteToServerAsync(DataTable, CancellationToken) |
Eine asynchrone Version von WriteToServer(DataTable), die alle Zeilen in das bereitgestellte DataTable-Array in eine Zieltabelle kopiert, die von der DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben wird. Das Abbruchtoken kann verwendet werden, um anzufordern, dass der Vorgang abgebrochen wird, bevor das Timeout des Befehls abläuft. Ausnahmen werden über das zurückgegebene Aufgabenobjekt gemeldet. |
WriteToServerAsync(DataTable, DataRowState) |
Die asynchrone Version von WriteToServer(DataTable, DataRowState), die nur die Zeilen, die dem angegebenen Zeilenstatus in der bereitgestellten DataTable entsprechen, in eine Zieltabelle kopiert, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. |
WriteToServerAsync(DataTable, DataRowState, CancellationToken) |
Die asynchrone Version von WriteToServer(DataTable, DataRowState), die nur die Zeilen, die dem angegebenen Zeilenstatus in der bereitgestellten DataTable entsprechen, in eine Zieltabelle kopiert, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. Das Abbruchtoken kann verwendet werden, um anzufordern, dass der Vorgang abgebrochen wird, bevor das Timeout des Befehls abläuft. Ausnahmen werden über das zurückgegebene Aufgabenobjekt gemeldet. |
WriteToServerAsync(DbDataReader) |
Eine asynchrone Version von WriteToServer(IDataReader), die alle Zeilen in das bereitgestellte IDataReader-Array in eine Zieltabelle kopiert, die von der DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben wird. |
WriteToServerAsync(DbDataReader, CancellationToken) |
Die asynchrone Version von WriteToServer(DbDataReader), mit der alle Zeilen aus dem bereitgestellten DbDataReader-Array in eine Zieltabelle kopiert werden, die durch die DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben ist. Das Abbruchtoken kann verwendet werden, um anzufordern, dass der Vorgang abgebrochen wird, bevor das Timeout des Befehls abläuft. Ausnahmen werden über das zurückgegebene Aufgabenobjekt gemeldet. |
WriteToServerAsync(IDataReader) |
Eine asynchrone Version von WriteToServer(IDataReader), die alle Zeilen in das bereitgestellte IDataReader-Array in eine Zieltabelle kopiert, die von der DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben wird. |
WriteToServerAsync(IDataReader, CancellationToken) |
Eine asynchrone Version von WriteToServer(IDataReader), die alle Zeilen in das bereitgestellte IDataReader-Array in eine Zieltabelle kopiert, die von der DestinationTableName-Eigenschaft des SqlBulkCopy-Objekts angegeben wird. Das Abbruchtoken kann verwendet werden, um anzufordern, dass der Vorgang abgebrochen wird, bevor das Timeout des Befehls abläuft. Ausnahmen werden über das zurückgegebene Aufgabenobjekt gemeldet. |
Ereignisse
SqlRowsCopied |
Tritt jedes Mal auf, wenn die durch die NotifyAfter-Eigenschaft angegebene Anzahl von Zeilen verarbeitet wurde. |
Explizite Schnittstellenimplementierungen
IDisposable.Dispose() |
Gibt alle von der aktuellen Instanz der SqlBulkCopy-Klasse verwendeten Ressourcen frei. |