SqlBulkCopy Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Gör att du effektivt kan massinläsa en SQL Server tabell med data från en annan källa.
public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
- Arv
-
SqlBulkCopy
- Implementeringar
Exempel
Följande konsolprogram visar hur du läser in data med hjälp av SqlBulkCopy klassen. I det här exemplet används en SqlDataReader för att kopiera data från tabellen Production.Product i SQL Server AdventureWorks-databasen till en liknande tabell i samma databas.
Important
Det här exemplet körs inte om du inte har skapat arbetstabellerna enligt beskrivningen i Inställning för masskopieringsexempel. Den här koden tillhandahålls för att demonstrera syntaxen för att endast använda SqlBulkCopy . Om käll- och måltabellerna finns i samma SQL Server instans är det enklare och snabbare att använda en Transact-SQL INSERT ... SELECT-instruktion för att kopiera data.
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();
// 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;";
}
}
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 New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = 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 destinationConnection As SqlConnection = _
New SqlConnection(connectionString)
destinationConnection.Open()
' Set up the bulk copy object.
' 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 bulkCopy As SqlBulkCopy = _
New SqlBulkCopy(destinationConnection)
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 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
Kommentarer
Microsoft SQL Server innehåller ett populärt kommandomeddelandeverktyg med namnet bcp för att flytta data från en tabell till en annan, oavsett om det är på en enskild server eller mellan servrar. Med SqlBulkCopy klassen kan du skriva hanterade kodlösningar som ger liknande funktioner. Det finns andra sätt att läsa in data i en SQL Server-tabell (TILL exempel INSERT-instruktioner), men SqlBulkCopy ger en betydande prestandafördel jämfört med dem.
Klassen SqlBulkCopy kan endast användas för att skriva data till SQL Server-tabeller. Datakällan är dock inte begränsad till SQL Server. Alla datakällor kan användas, så länge data kan läsas in till en DataTable-instans eller läsas med en IDataReader-instans.
SqlBulkCopy misslyckas när en DataTable kolumn av typen SqlDateTime i en SQL Server kolumn vars typ är en av de datum-/tidstyper som lades till i SQL Server 2008.
Konstruktorer
| Name | Description |
|---|---|
| SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Initierar en ny instans av SqlBulkCopy klassen med den angivna befintliga öppna instansen av SqlConnection. Instansen SqlBulkCopy fungerar enligt de alternativ som anges i parametern |
| SqlBulkCopy(SqlConnection) |
Initierar en ny instans av SqlBulkCopy klassen med den angivna öppna instansen av SqlConnection. |
| SqlBulkCopy(String, SqlBulkCopyOptions) |
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna |
| SqlBulkCopy(String) |
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna |
Egenskaper
| Name | Description |
|---|---|
| BatchSize |
Antal rader i varje batch. I slutet av varje batch skickas raderna i batchen till servern. |
| BulkCopyTimeout |
Antal sekunder som åtgärden ska slutföras innan tidsgränsen uppnås. |
| ColumnMappings |
Returnerar en samling SqlBulkCopyColumnMapping objekt. Kolumnmappningar definierar relationerna mellan kolumner i datakällan och kolumnerna i målet. |
| DestinationTableName |
Namn på måltabellen på servern. |
| EnableStreaming |
Aktiverar eller inaktiverar ett SqlBulkCopy objekt för att strömma data från ett IDataReader objekt. |
| NotifyAfter |
Definierar antalet rader som ska bearbetas innan en meddelandehändelse genereras. |
Metoder
| Name | Description |
|---|---|
| Close() |
Stänger SqlBulkCopy-instansen. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
| WriteToServer(DataRow[]) |
Kopierar alla rader från den angivna DataRow matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServer(DataTable, DataRowState) |
Kopierar endast rader som matchar det angivna radtillståndet i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServer(DataTable) |
Kopierar alla rader i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServer(DbDataReader) |
Kopierar alla rader från den angivna DbDataReader matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServer(IDataReader) |
Kopierar alla rader i den angivna IDataReader till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(DataRow[], CancellationToken) |
Den asynkrona versionen av WriteToServer(DataRow[]), som kopierar alla rader från den angivna DataRow matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. Annulleringstoken kan användas för att begära att åtgärden avbryts innan tidsgränsen för kommandot förflutit. Undantag rapporteras via det returnerade aktivitetsobjektet. |
| WriteToServerAsync(DataRow[]) |
Den asynkrona versionen av WriteToServer(DataRow[]), som kopierar alla rader från den angivna DataRow matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(DataTable, CancellationToken) |
Den asynkrona versionen av WriteToServer(DataTable), som kopierar alla rader i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. Annulleringstoken kan användas för att begära att åtgärden avbryts innan tidsgränsen för kommandot förflutit. Undantag rapporteras via det returnerade aktivitetsobjektet. |
| WriteToServerAsync(DataTable, DataRowState, CancellationToken) |
Den asynkrona versionen av WriteToServer(DataTable, DataRowState), som endast kopierar rader som matchar det angivna radtillståndet i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. Annulleringstoken kan användas för att begära att åtgärden avbryts innan tidsgränsen för kommandot förflutit. Undantag rapporteras via det returnerade aktivitetsobjektet. |
| WriteToServerAsync(DataTable, DataRowState) |
Den asynkrona versionen av WriteToServer(DataTable, DataRowState), som endast kopierar rader som matchar det angivna radtillståndet i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(DataTable) |
Den asynkrona versionen av WriteToServer(DataTable), som kopierar alla rader i den angivna DataTable till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(DbDataReader, CancellationToken) |
Den asynkrona versionen av WriteToServer(DbDataReader), som kopierar alla rader från den angivna DbDataReader matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(DbDataReader) |
Den asynkrona versionen av WriteToServer(DbDataReader), som kopierar alla rader från den angivna DbDataReader matrisen till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
| WriteToServerAsync(IDataReader, CancellationToken) |
Den asynkrona versionen av WriteToServer(IDataReader), som kopierar alla rader i den angivna IDataReader till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. Annulleringstoken kan användas för att begära att åtgärden avbryts innan tidsgränsen för kommandot förflutit. Undantag rapporteras via det returnerade aktivitetsobjektet. |
| WriteToServerAsync(IDataReader) |
Den asynkrona versionen av WriteToServer(IDataReader), som kopierar alla rader i den angivna IDataReader till en måltabell som anges av DestinationTableName objektets SqlBulkCopy egenskap. |
Händelser
| Name | Description |
|---|---|
| SqlRowsCopied |
Inträffar varje gång som antalet rader som anges av NotifyAfter egenskapen har bearbetats. |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Släpper alla resurser som används av den aktuella instansen SqlBulkCopy av klassen. |