SqlBulkCopy SqlBulkCopy SqlBulkCopy SqlBulkCopy Class

정의

데이터가 있는 SQL Server 테이블을 다른 소스에서 대량으로 로드하는 작업을 효율적으로 수행할 수 있습니다.Lets you efficiently bulk load a SQL Server table with data from another source.

public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
    interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
상속
SqlBulkCopySqlBulkCopySqlBulkCopySqlBulkCopy
구현

예제

다음 콘솔 애플리케이션에서는 SqlBulkCopy 클래스를 사용하여 데이터를 로드하는 방법을 보여 줍니다.The following console application demonstrates how to load data using the SqlBulkCopy class. 이 예제에서는 SqlDataReader 에서 데이터를 복사 하는 데 사용 되는 Production.Product SQL Server의 테이블 AdventureWorks 동일한 데이터베이스의 유사한 테이블에는 데이터베이스입니다.In this example, a SqlDataReader is used to copy data from the Production.Product table in the SQL Server AdventureWorks database to a similar table in the same database.

중요

이 샘플에 설명 된 대로 작업 테이블을 만든 경우가 아니면 실행 되지 것입니다 대량 복사 예제 설정합니다.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. 이 코드는 사용 하는 구문을 보여 주기 위해 제공 됩니다 SqlBulkCopy 만 합니다.This code is provided to demonstrate the syntax for using SqlBulkCopy only. 쉽고 빠르게 TRANSACT-SQL을 사용 하는 원본 테이블과 대상 테이블에 동일한 SQL Server 인스턴스에 있는 경우 INSERT … SELECT 문은 데이터를 복사 합니다.If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the 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

설명

Microsoft SQL Server 명명 된 인기 있는 명령 프롬프트 유틸리티를 포함 bcp 서버 간 또는 단일 서버에 있는지 여부를 다른 데이터를에서 이동 합니다.Microsoft SQL Server includes a popular command-prompt utility named bcp for moving data from one table to another, whether on a single server or between servers. SqlBulkCopy 클래스를 사용 하면 비슷한 기능을 제공 하는 관리 코드 솔루션을 작성 합니다.The SqlBulkCopy class lets you write managed code solutions that provide similar functionality. 가지 다른 방법 (INSERT 문, 예를 들어), SQL Server 테이블로 데이터를 로드 하지만 SqlBulkCopy 가져갈 상당한 성능 이점을 제공 합니다.There are other ways to load data into a SQL Server table (INSERT statements, for example), but SqlBulkCopy offers a significant performance advantage over them.

SqlBulkCopy 클래스를 사용하면 SQL Server 테이블에만 데이터를 쓸 수 있습니다.The SqlBulkCopy class can be used to write data only to SQL Server tables. 그러나 데이터 원본 SQL server에 제한 되지 않습니다. 데이터를 로드할 수 있다면 모든 데이터 원본을 사용할 수 있습니다는 DataTable 인스턴스 또는 읽기는 IDataReader 인스턴스.However, the data source is not limited to SQL Server; any data source can be used, as long as the data can be loaded to a DataTable instance or read with a IDataReader instance.

SqlBulkCopy 대량 로드는 DataTable 형식의 열 SqlDateTime SQL server 열 형식의 날짜/시간 형식 중 하나는 SQL Server 2008에 추가 합니다.SqlBulkCopy will fail when bulk loading a DataTable column of type SqlDateTime into a SQL Server column whose type is one of the date/time types added in SQL Server 2008.

생성자

SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection) SqlBulkCopy(SqlConnection)

지정된 SqlBulkCopy의 열려 있는 인스턴스를 사용하여 SqlConnection 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the SqlBulkCopy class using the specified open instance of SqlConnection.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

제공된 SqlBulkCopy의 이미 열려 있는 인스턴스를 사용하여 SqlConnection 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the SqlBulkCopy class using the supplied existing open instance of SqlConnection. SqlBulkCopy 인스턴스는 copyOptions 매개 변수에 제공된 옵션에 따라 작동합니다.The SqlBulkCopy instance behaves according to options supplied in the copyOptions parameter. 제공된 SqlTransaction이 null이 아니면 복사 작업이 해당 트랜잭션 내에서 수행됩니다.If a non-null SqlTransaction is supplied, the copy operations will be performed within that transaction.

SqlBulkCopy(String) SqlBulkCopy(String) SqlBulkCopy(String) SqlBulkCopy(String)

제공된 connectionString을 기반으로 하는 SqlConnection의 새 인스턴스를 초기화하고 엽니다.Initializes and opens a new instance of SqlConnection based on the supplied connectionString. 이 생성자는 SqlConnection을 사용하여 SqlBulkCopy 클래스의 새 인스턴스를 초기화합니다.The constructor uses the SqlConnection to initialize a new instance of the SqlBulkCopy class.

SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions) SqlBulkCopy(String, SqlBulkCopyOptions)

제공된 connectionString을 기반으로 하는 SqlConnection의 새 인스턴스를 초기화하고 엽니다.Initializes and opens a new instance of SqlConnection based on the supplied connectionString. 이 생성자는 SqlConnection을 사용하여 SqlBulkCopy 클래스의 새 인스턴스를 초기화합니다.The constructor uses that SqlConnection to initialize a new instance of the SqlBulkCopy class. SqlConnection 인스턴스는 copyOptions 매개 변수에 제공된 옵션에 따라 작동합니다.The SqlConnection instance behaves according to options supplied in the copyOptions parameter.

속성

BatchSize BatchSize BatchSize BatchSize

각 일괄 처리의 행 수입니다.Number of rows in each batch. 각 일괄 처리의 끝에서 일괄 처리의 행이 서버로 전송됩니다.At the end of each batch, the rows in the batch are sent to the server.

BulkCopyTimeout BulkCopyTimeout BulkCopyTimeout BulkCopyTimeout

제한 시간이 초과되기 전에 작업이 완료되기 위한 시간(초)입니다.Number of seconds for the operation to complete before it times out.

ColumnMappings ColumnMappings ColumnMappings ColumnMappings

SqlBulkCopyColumnMapping은 항목의 컬렉션을 반환합니다.Returns a collection of SqlBulkCopyColumnMapping items. 열 매핑은 데이터 원본의 열과 대상의 열 간 관계를 정의합니다.Column mappings define the relationships between columns in the data source and columns in the destination.

DestinationTableName DestinationTableName DestinationTableName DestinationTableName

서버에 있는 대상 테이블의 이름입니다.Name of the destination table on the server.

EnableStreaming EnableStreaming EnableStreaming EnableStreaming

SqlBulkCopy 개체가 IDataReader 개체에서 데이터를 스트리밍할 수 있도록 설정하거나 스트리밍할 수 없도록 합니다.Enables or disables a SqlBulkCopy object to stream data from an IDataReader object

NotifyAfter NotifyAfter NotifyAfter NotifyAfter

알림 이벤트를 생성하기 전에 처리할 행의 수를 정의합니다.Defines the number of rows to be processed before generating a notification event.

메서드

Close() Close() Close() Close()

SqlBulkCopy 인스턴스를 닫습니다.Closes the SqlBulkCopy instance.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)
WriteToServer(DataRow[]) WriteToServer(DataRow[]) WriteToServer(DataRow[]) WriteToServer(DataRow[])

제공된 DataRow 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.Copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DataTable) WriteToServer(DataTable) WriteToServer(DataTable) WriteToServer(DataTable)

제공된 DataTable의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.Copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState) WriteToServer(DataTable, DataRowState)

제공된 DataTable에서 제공된 행 상태와 일치하는 행만을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.Copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(DbDataReader) WriteToServer(DbDataReader) WriteToServer(DbDataReader) WriteToServer(DbDataReader)

제공된 DbDataReader 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.Copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServer(IDataReader) WriteToServer(IDataReader) WriteToServer(IDataReader) WriteToServer(IDataReader)

제공된 IDataReader의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.Copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[]) WriteToServerAsync(DataRow[])

제공된 WriteToServer(DataRow[]) 배열의 모든 행을 DataRow 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataRow[]), which copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken) WriteToServerAsync(DataRow[], CancellationToken)

제공된 WriteToServer(DataRow[]) 배열의 모든 행을 DataRow 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataRow[]), which copies all rows from the supplied DataRow array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

취소 토큰은 명령 제한 시간이 경과하기 전에 작업을 중단하는 요청에 사용할 수 있습니다.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.

WriteToServerAsync(DataTable) WriteToServerAsync(DataTable) WriteToServerAsync(DataTable) WriteToServerAsync(DataTable)

제공된 WriteToServer(DataTable)의 모든 행을 DataTable 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataTable), which copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken) WriteToServerAsync(DataTable, CancellationToken)

제공된 WriteToServer(DataTable)의 모든 행을 DataTable 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataTable), which copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

취소 토큰은 명령 시간 제한이 경과하기 전에 작업을 취소하는 요청에 사용할 수 있습니다.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.

WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState) WriteToServerAsync(DataTable, DataRowState)

제공된 WriteToServer(DataTable, DataRowState)에서 제공된 행 상태와 일치하는 행만을 DataTable 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataTable, DataRowState), which copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken) WriteToServerAsync(DataTable, DataRowState, CancellationToken)

제공된 WriteToServer(DataTable, DataRowState)에서 제공된 행 상태와 일치하는 행만을 DataTable 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DataTable, DataRowState), which copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

취소 토큰은 명령 제한 시간이 경과하기 전에 작업을 중단하는 요청에 사용할 수 있습니다.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.

WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader) WriteToServerAsync(DbDataReader)

제공된 WriteToServer(DbDataReader) 배열의 모든 행을 DbDataReader 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DbDataReader), which copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken) WriteToServerAsync(DbDataReader, CancellationToken)

제공된 WriteToServer(DbDataReader) 배열의 모든 행을 DbDataReader 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(DbDataReader), which copies all rows from the supplied DbDataReader array to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader) WriteToServerAsync(IDataReader)

제공된 WriteToServer(IDataReader)의 모든 행을 IDataReader 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(IDataReader), which copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken) WriteToServerAsync(IDataReader, CancellationToken)

제공된 WriteToServer(IDataReader)의 모든 행을 IDataReader 개체의 DestinationTableName 속성에 지정된 대상 테이블로 복사하는 SqlBulkCopy의 비동기 버전입니다.The asynchronous version of WriteToServer(IDataReader), which copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object.

취소 토큰은 명령 시간 제한이 경과하기 전에 작업을 취소하는 요청에 사용할 수 있습니다.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.

이벤트

SqlRowsCopied SqlRowsCopied SqlRowsCopied SqlRowsCopied

NotifyAfter 속성에 지정된 개수의 행이 처리될 때마다 발생합니다.Occurs every time that the number of rows specified by the NotifyAfter property have been processed.

명시적 인터페이스 구현

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

SqlBulkCopy 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the current instance of the SqlBulkCopy class.

적용 대상

추가 정보