SqlBulkCopy Osztály

Definíció

Lehetővé teszi egy SQL Server tábla hatékony tömeges betöltését egy másik forrásból származó adatokkal.

public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
    interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
Öröklődés
SqlBulkCopy
Megvalósítás

Példák

Az alábbi konzolalkalmazás bemutatja, hogyan tölthet be adatokat az SqlBulkCopy osztály használatával. Ebben a példában a SqlDataReader rendszer adatokat másol az SQL Server AdventureWorks adatbázis Production.Product táblájából egy hasonló táblába ugyanabban az adatbázisban.

Important

Ez a példa nem fog futni, hacsak nem hozta létre a munkatáblákat a Tömeges másolási példa beállításaszerint. Ez a kód csak az SqlBulkCopy használatának szintaxisát mutatja be. Ha a forrás- és céltáblák ugyanabban a SQL Server példányban találhatók, egyszerűbb és gyorsabb egy Transact-SQL INSERT ... SELECT utasítás használata az adatok másolásához.

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

Megjegyzések

Microsoft SQL Server tartalmaz egy népszerű parancssori segédprogramot bcp az adatok egyik táblából a másikba való áthelyezéséhez, akár egyetlen kiszolgálón, akár kiszolgálók között. Az SqlBulkCopy osztály lehetővé teszi a hasonló funkciókat biztosító felügyelt kódmegoldások írását. Más módokon is betölthet adatokat egy SQL Server-táblába (például INSERT-utasítások), de SqlBulkCopy jelentős teljesítményelőnyt biztosít számukra.

Az SqlBulkCopy osztály csak SQL Server-táblákba írhat adatokat. Az adatforrás azonban nem korlátozódik SQL Server; bármely adatforrás használható, amíg az adatok betölthetők egy DataTable-példányba, vagy egy IDataReader-példánysal olvashatók.

SqlBulkCopy sikertelen lesz, ha egy DataTable oszlop tömeges betöltése SqlDateTime típusú oszlopot egy SQL Server oszlopba, amelynek típusa a 2008. SQL Server-ben hozzáadott dátum/idő típusúak egyike.

Konstruktorok

Name Description
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializálja az osztály új példányát a SqlBulkCopy megadott meglévő nyitott példány SqlConnectionhasználatával. A SqlBulkCopy példány a paraméterben copyOptions megadott beállításoknak megfelelően viselkedik. Ha nem null SqlTransaction értéket ad meg, a másolási műveletek az adott tranzakción belül lesznek végrehajtva.

SqlBulkCopy(SqlConnection)

Inicializálja az új osztálypéldányt a megadott SqlBulkCopy nyitott példány használatával.

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializál és megnyit egy új SqlConnection példányt a megadott connectionString alapján. A konstruktor ezzel SqlConnection inicializálja az osztály új példányát SqlBulkCopy . A SqlConnection példány a paraméterben copyOptions megadott beállításoknak megfelelően viselkedik.

SqlBulkCopy(String)

Inicializál és megnyit egy új SqlConnection példányt a megadott connectionString alapján. A konstruktor az SqlConnection-t az új SqlBulkCopy osztálypéldány inicializálására használja.

Tulajdonságok

Name Description
BatchSize

Sorok száma az egyes kötegekben. Az egyes kötegek végén a köteg sorait a rendszer elküldi a kiszolgálónak.

BulkCopyTimeout

A művelet befejezéséhez szükséges másodpercek száma, mielőtt túllépi az időkorlátot.

ColumnMappings

Elemgyűjteményt SqlBulkCopyColumnMapping ad vissza. Az oszlopleképezések határozzák meg az adatforrás oszlopai és a céloszlopok közötti kapcsolatokat.

DestinationTableName

A kiszolgáló céltáblájának neve.

EnableStreaming

Engedélyezi vagy letiltja, hogy egy SqlBulkCopy objektum adatokat streameljen egy IDataReader objektumból.

NotifyAfter

Meghatározza az értesítési esemény létrehozása előtt feldolgozandó sorok számát.

Metódusok

Name Description
Close()

Bezárja a SqlBulkCopy példányt.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
WriteToServer(DataRow[])

A megadott DataRow tömb összes sorát átmásolja az objektum tulajdonsága DestinationTableName által SqlBulkCopy megadott céltáblába.

WriteToServer(DataTable, DataRowState)

Csak olyan sorokat másol, amelyek megfelelnek az objektum tulajdonsága által DataTable megadott céltábla megadott DestinationTableName sorállapotánakSqlBulkCopy.

WriteToServer(DataTable)

Az összes sort a megadott DataTable-ban a DestinationTableName tulajdonság által specifikált céltáblába másolja az SqlBulkCopy objektum.

WriteToServer(DbDataReader)

A megadott DbDataReader tömb összes sorát átmásolja az objektum tulajdonsága DestinationTableName által SqlBulkCopy megadott céltáblába.

WriteToServer(IDataReader)

Az összes sort a megadott IDataReader-ban a DestinationTableName tulajdonság által specifikált céltáblába másolja az SqlBulkCopy objektum.

WriteToServerAsync(DataRow[], CancellationToken)

A /> aszinkron verziója, amely a megadott tömb összes sorát az objektum tulajdonsága által megadott céltáblába másolja.

A lemondási jogkivonat használatával kérheti a művelet megszakítását a parancs időtúllépése előtt. A kivételek a visszaadott tevékenységobjektumon keresztül lesznek jelentve.

WriteToServerAsync(DataRow[])

A /> aszinkron verziója, amely a megadott tömb összes sorát az objektum tulajdonsága által megadott céltáblába másolja.

WriteToServerAsync(DataTable, CancellationToken)

A aszinkron verziója WriteToServer(DataTable), amely az DataTable objektum tulajdonsága által DestinationTableName megadott céltábla összes sorát SqlBulkCopy átmásolja.

A lemondási jogkivonat használatával kérheti a művelet megszakítását a parancs időtúllépése előtt. A kivételek a visszaadott tevékenységobjektumon keresztül lesznek jelentve.

WriteToServerAsync(DataTable, DataRowState, CancellationToken)

Az objektum aszinkron verziója WriteToServer(DataTable, DataRowState), amely csak olyan sorokat másol, amelyek megfelelnek az DataTable objektum tulajdonsága által DestinationTableName megadott céltábla megadott sorállapotának SqlBulkCopy .

A lemondási jogkivonat használatával kérheti a művelet megszakítását a parancs időtúllépése előtt. A kivételek a visszaadott tevékenységobjektumon keresztül lesznek jelentve.

WriteToServerAsync(DataTable, DataRowState)

Az objektum aszinkron verziója WriteToServer(DataTable, DataRowState), amely csak olyan sorokat másol, amelyek megfelelnek az DataTable objektum tulajdonsága által DestinationTableName megadott céltábla megadott sorállapotának SqlBulkCopy .

WriteToServerAsync(DataTable)

A aszinkron verziója WriteToServer(DataTable), amely az DataTable objektum tulajdonsága által DestinationTableName megadott céltábla összes sorát SqlBulkCopy átmásolja.

WriteToServerAsync(DbDataReader, CancellationToken)

A /> aszinkron verziója, amely a megadott tömb összes sorát az objektum tulajdonsága által megadott céltáblába másolja.

WriteToServerAsync(DbDataReader)

A /> aszinkron verziója, amely a megadott tömb összes sorát az objektum tulajdonsága által megadott céltáblába másolja.

WriteToServerAsync(IDataReader, CancellationToken)

A aszinkron verziója WriteToServer(IDataReader), amely az IDataReader objektum tulajdonsága által DestinationTableName megadott céltábla összes sorát SqlBulkCopy átmásolja.

A lemondási jogkivonat használatával kérheti a művelet megszakítását a parancs időtúllépése előtt. A kivételek a visszaadott tevékenységobjektumon keresztül lesznek jelentve.

WriteToServerAsync(IDataReader)

A aszinkron verziója WriteToServer(IDataReader), amely az IDataReader objektum tulajdonsága által DestinationTableName megadott céltábla összes sorát SqlBulkCopy átmásolja.

esemény

Name Description
SqlRowsCopied

Minden alkalommal előfordul, amikor a tulajdonság által NotifyAfter megadott sorok száma feldolgozásra került.

Explicit interfész-implementációk

Name Description
IDisposable.Dispose()

Az osztály aktuális példánya által használt összes erőforrást felszabadítja SqlBulkCopy .

A következőre érvényes:

Lásd még