SqlBulkCopy 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
데이터가 있는 SQL Server 테이블을 다른 소스에서 대량으로 로드하는 작업을 효율적으로 수행할 수 있습니다.
public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
- 상속
-
SqlBulkCopy
- 구현
예제
다음 콘솔 애플리케이션에서는 SqlBulkCopy 클래스를 사용하여 데이터를 로드하는 방법을 보여줍니다. 이 예제에서는 SqlDataReader를 사용하여 SQL Server AdventureWorks 데이터베이스에 있는 Production.Product 테이블의 데이터를 같은 데이터베이스의 비슷한 테이블로 복사합니다.
중요
이 샘플은 가져올 대량 복사 샘플 설정에 설명된 대로 작업 테이블을 만들지 않은 경우 실행되지 않습니다.
이 코드는 SqlBulkCopy를 사용하는 구문을 보여 주는 용도로 제공됩니다. 원본 테이블과 대상 테이블이 동일한 SQL Server instance 있는 경우 Transact-SQL INSERT … SELECT
문을 사용하여 데이터를 복사하는 것이 더 쉽고 빠릅니다.
using Microsoft.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;";
}
}
설명
Microsoft SQL Server 단일 서버 또는 서버 간에 데이터를 한 테이블에서 다른 테이블로 이동하기 위한 bcp라는 인기 있는 명령 프롬프트 유틸리티가 포함되어 있습니다. 클래스를 SqlBulkCopy 사용하면 비슷한 기능을 제공하는 관리 코드 솔루션을 작성할 수 있습니다. INSERT 문과 같은 다른 방법을 사용하여 데이터를 SQL Server 테이블에 로드할 수 있지만 SqlBulkCopy는 훨씬 더 향상된 성능을 제공합니다. SqlBulkCopy 클래스를 사용하면 SQL Server 테이블에만 데이터를 작성할 수 있습니다. 그러나 데이터 원본은 SQL Server 제한되지 않습니다. 데이터를 instance 로드 DataTable 하거나 instance 사용하여 읽을 수 있는 한 모든 데이터 원본을 IDataReader 사용할 수 있습니다. SqlBulkCopy는 형식 SqlDateTime 이 SQL Server 2008에 추가된 날짜/시간 형식 중 하나인 SQL Server 열에 형식의 열을 대량 로드 DataTable 할 때 실패합니다.
생성자
SqlBulkCopy(SqlConnection) |
의 지정된 열린 instance 사용하여 클래스의 SqlBulkCopy 새 instance SqlConnection 초기화합니다. |
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
의 제공된 기존 열린 instance 사용하여 클래스의 SqlBulkCopy 새 instance SqlConnection 초기화합니다. SqlBulkCopy instance 에 제공된 옵션에 따라 작동합니다. |
SqlBulkCopy(String) |
제공된 에 따라 의 SqlConnection 새 instance 초기화하고 엽니다. |
SqlBulkCopy(String, SqlBulkCopyOptions) |
제공된 에 따라 의 SqlConnection 새 instance 초기화하고 엽니다. |
속성
BatchSize |
각 일괄 처리의 행 수입니다. 각 일괄 처리가 끝나면 일괄 처리의 행이 서버로 보내집니다. |
BulkCopyTimeout |
제한 시간이 초과되기 전에 작업이 완료되기 위한 시간(초)입니다. |
ColumnMappings |
SqlBulkCopyColumnMapping은 항목의 컬렉션을 반환합니다. 열 매핑은 데이터 원본의 열과 대상의 열 간 관계를 정의합니다. |
ColumnOrderHints |
SqlBulkCopyColumnOrderHint은 항목의 컬렉션을 반환합니다. 열 순서 힌트는 대상 테이블의 클러스터형 인덱스에 있는 열의 정렬 순서를 설명합니다. |
DestinationTableName |
서버에 있는 대상 테이블의 이름입니다. |
EnableStreaming |
SqlBulkCopy 개체의 데이터를 스트리밍할 IDataReader 개체를 사용하거나 사용하지 않도록 설정합니다. |
NotifyAfter |
알림 이벤트를 생성하기 전에 처리할 행의 수를 정의합니다. |
RowsCopied |
진행 중인 대량 복사 작업에서 처리되는 행 수입니다. |
RowsCopied64 |
진행 중인 대량 복사 작업에서 처리되는 행 수입니다. |
메서드
이벤트
SqlRowsCopied |
NotifyAfter 속성에 지정된 개수의 행이 처리될 때마다 발생합니다. |
명시적 인터페이스 구현
IDisposable.Dispose() |
SqlBulkCopy 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다. |