This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Daten-Transfer mittels SqlBulkCopy beschleunigen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Daten von einem Datenbank-System auf das andere zu verschieben ist ansich keine gro��e Sache. Interesant wird es dann, wenn Performance gefragt ist. Wird das Ziel durch einen Microsoft SQL Server repr��sentiert, gibt es seit .NET 2.0 die Klasse SqlBulkCopy, die hier sehr gute Dienste leistet.
Durch ein BulkCopy ist es m��glich eine gesamte DataTable zu transferieren ohne s��mtliche Commands einzeln abzusetzen.
An dieser Stelle sei darauf hingewiesen, dass ein SqlBulkCopy nur mit einem Microsoft SQL Server als Ziel funktioniert. Die Quelle kann ein x-beliebiges Datenbank Management System darstellen.
Die Verwendung gestaltet sich einfach:
public static void BulkCopy (SqlConnection connection, string destinationTable, DataTable dataTable)
{
SqlBulkCopy sbc = new SqlBulkCopy(connection);
sbc.DestinationTableName = destinationTable;
sbc.WriteToServer(dataTable);
}
In diesem Beispiel werden einer Methode eine g��ltige Verbindung zu einem SQL Server, der Name der Zieltabelle, als auch eine DataTable ��bergeben. Mit diesen Informationen ist es m��glich die gesamten Daten der DataTable in die Zieltabelle zu kopieren. Hier gilt es zu beachten, dass die Methode WriteToServer weitere ��berladungen besitzt, mit der beispielsweise auch ein DataRow-Array kopiert werden kann.
Der Typ SqlBulkCopy bietet jedoch noch weitere M��glichkeiten. Durch die Eigenschaft NotifyAfter ist es m��glich eine Benachrichtigung zu definieren. Wird beispielsweise ein Wert von 1.000 gesetzt, wird nach 1.000 verarbeiteten Datens��tzen das Event SqlRowsCopied ausgel��st. Dadurch ist es m��glich, eine Fortschrittsanzeige zu realisieren.