Nyelv

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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

Név 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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

SqlBulkCopy(SqlConnection)

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

Tulajdonságok

Név 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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

BulkCopyTimeout

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

DestinationTableName

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

EnableStreaming

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

NotifyAfter

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

Metódusok

Név Description
Close()

Bezárja a SqlBulkCopy példányt.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

WriteToServer(DbDataReader)

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

      <p>The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. Exceptions will be reported via the returned Task object.</p>
      <p>For new development, use <a href="/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace">Microsoft.Data.SqlClient</a>. This page documents System.Data.SqlClient.</p>
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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

      The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. Exceptions will be reported via the returned Task object.

      <p>For new development, use <a href="/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace">Microsoft.Data.SqlClient</a>. This page documents System.Data.SqlClient.</p>
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 .

      The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. Exceptions will be reported via the returned Task object.

      <p>For new development, use <a href="/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace">Microsoft.Data.SqlClient</a>. This page documents System.Data.SqlClient.</p>
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 .

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

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.

      The cancellation token can be used to request that the operation be abandoned before the command timeout elapses. Exceptions will be reported via the returned Task object.

      <p>For new development, use <a href="/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace">Microsoft.Data.SqlClient</a>. This page documents System.Data.SqlClient.</p>
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.

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

esemény

Név Description
SqlRowsCopied

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

Explicit interfész-implementációk

Név Description
IDisposable.Dispose()

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

Új fejlesztéshez használja a Microsoft. Data.SqlClient. Ez a lap a System.Data.SqlClient fájlokat tartalmazza.

A következőre érvényes:

Lásd még