다음을 통해 공유


SqlBulkCopy.WriteToServer 메서드

정의

오버로드

WriteToServer(DbDataReader)

제공된 DbDataReader 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

WriteToServer(DataRow[])

제공된 DataRow 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

WriteToServer(DataTable)

제공된 DataTable의 모든 행을 SqlBulkCopy 개체의 DestinationTableName 속성으로 지정된 대상 테이블에 복사합니다.

WriteToServer(IDataReader)

제공된 IDataReader의 모든 행을 SqlBulkCopy 개체의 DestinationTableName 속성으로 지정된 대상 테이블에 복사합니다.

WriteToServer(DataTable, DataRowState)

제공된 DataTable에서 제공된 행 상태와 일치하는 행만을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

WriteToServer(DbDataReader)

제공된 DbDataReader 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

public:
 void WriteToServer(System::Data::Common::DbDataReader ^ reader);
public void WriteToServer (System.Data.Common.DbDataReader reader);
member this.WriteToServer : System.Data.Common.DbDataReader -> unit
Public Sub WriteToServer (reader As DbDataReader)

매개 변수

reader
DbDataReader

대상 테이블로 복사될 행이 포함된 DbDataReader입니다.

예외

SqlBulkCopyColumnOrderHint 유효한 대상 열 이름을 지정하지 않았습니다.

적용 대상

WriteToServer(DataRow[])

제공된 DataRow 배열의 모든 행을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

public:
 void WriteToServer(cli::array <System::Data::DataRow ^> ^ rows);
public void WriteToServer (System.Data.DataRow[] rows);
member this.WriteToServer : System.Data.DataRow[] -> unit
Public Sub WriteToServer (rows As DataRow())

매개 변수

rows
DataRow[]

대상 테이블에 복사되는 DataRow 개체의 배열입니다.

예외

SqlBulkCopyColumnOrderHint 유효한 대상 열 이름을 지정하지 않았습니다.

예제

다음 콘솔 애플리케이션 데이터 대량 로드에서 하는 방법에 설명 된 DataRow 배열입니다. 대상 테이블은 AdventureWorks 데이터베이스의 테이블입니다.

이 예제에서는 런타임에 가 DataTable 만들어집니다. 대상 테이블에 복사하려면 에서 DataTable 단일 행을 선택합니다.

중요

이 샘플은 가져올 대량 복사 샘플 설정에 설명된 대로 작업 테이블을 만들지 않은 경우 실행되지 않습니다. 이 코드는 SqlBulkCopy를 사용하는 구문을 보여 주는 용도로 제공됩니다. 원본 테이블과 대상 테이블이 동일한 SQL Server 인스턴스에 있는 경우 Transact-SQL INSERT … SELECT 문을 사용하여 데이터를 복사하는 것이 더 쉽고 빠릅니다.

설명

대량 복사 작업이 진행되는 동안 연결된 대상 SqlConnection 은 처리 중이며 연결에서 다른 작업을 수행할 수 없습니다.

컬렉션은 ColumnMappings 열에서 DataRow 대상 데이터베이스 테이블로 매핑됩니다.

적용 대상

WriteToServer(DataTable)

제공된 DataTable의 모든 행을 SqlBulkCopy 개체의 DestinationTableName 속성으로 지정된 대상 테이블에 복사합니다.

public:
 void WriteToServer(System::Data::DataTable ^ table);
public void WriteToServer (System.Data.DataTable table);
member this.WriteToServer : System.Data.DataTable -> unit
Public Sub WriteToServer (table As DataTable)

매개 변수

table
DataTable

대상 테이블로 복사될 행이 포함된 DataTable입니다.

예외

SqlBulkCopyColumnOrderHint 유효한 대상 열 이름을 지정하지 않았습니다.

예제

다음 콘솔 애플리케이션 데이터 대량 로드에서 하는 방법에 설명 된 DataTable합니다. 대상 테이블은 AdventureWorks 데이터베이스의 테이블입니다.

이 예제에서 는 DataTable 런타임에 만들어지고 는 작업의 원본 SqlBulkCopy 입니다.

중요

이 샘플은 가져올 대량 복사 샘플 설정에 설명된 대로 작업 테이블을 만들지 않은 경우 실행되지 않습니다. 이 코드는 SqlBulkCopy를 사용하는 구문을 보여 주는 용도로 제공됩니다. 원본 테이블과 대상 테이블이 동일한 SQL Server 인스턴스에 있는 경우 Transact-SQL INSERT … SELECT 문을 사용하여 데이터를 복사하는 것이 더 쉽고 빠릅니다.

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a connection to the AdventureWorks database.
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            connection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                connection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(newProducts);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // 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 DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

        // Return the new DataTable. 
        return newProducts;
    }
    private static string GetConnectionString()
    // To avoid storing the connection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

설명

의 모든 행은 삭제된 행 DataTable 을 제외하고 대상 테이블에 복사됩니다.

대량 복사 작업이 진행되는 동안 연결된 대상 SqlConnection 은 처리 중이며 연결에서 다른 작업을 수행할 수 없습니다.

컬렉션은 ColumnMappings 열에서 DataTable 대상 데이터베이스 테이블로 매핑됩니다.

추가 정보

적용 대상

WriteToServer(IDataReader)

제공된 IDataReader의 모든 행을 SqlBulkCopy 개체의 DestinationTableName 속성으로 지정된 대상 테이블에 복사합니다.

public:
 void WriteToServer(System::Data::IDataReader ^ reader);
public void WriteToServer (System.Data.IDataReader reader);
member this.WriteToServer : System.Data.IDataReader -> unit
Public Sub WriteToServer (reader As IDataReader)

매개 변수

reader
IDataReader

대상 테이블로 복사될 행이 포함된 IDataReader입니다.

예외

SqlBulkCopyColumnOrderHint 유효한 대상 열 이름을 지정하지 않았습니다.

예제

다음 콘솔 애플리케이션 데이터 대량 로드에서 하는 방법에 설명 된 SqlDataReader합니다. 대상 테이블은 AdventureWorks 데이터베이스의 테이블입니다.

중요

이 샘플은 가져올 대량 복사 샘플 설정에 설명된 대로 작업 테이블을 만들지 않은 경우 실행되지 않습니다. 이 코드는 SqlBulkCopy를 사용하는 구문을 보여 주는 용도로 제공됩니다. 원본 테이블과 대상 테이블이 동일한 SQL Server 인스턴스에 있는 경우 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();

            // Set up the bulk copy object using a connection string. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                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;";
    }
}

설명

복사 작업은 판독기에서 사용 가능한 다음 행에서 시작됩니다. 대부분의 경우 판독기가 방금 또는 유사한 호출에 의해 ExecuteReader() 반환되었으므로 사용 가능한 다음 행이 첫 번째 행입니다. 여러 결과를 처리하려면 데이터 판독기에서 를 호출 NextResult() 하고 다시 호출 WriteToServer 합니다.

를 사용하면 WriteToServer 판독기의 상태가 수정된다는 점에 유의하세요. 메서드는 false를 반환하거나 작업이 중단되거나 오류가 발생할 때까지 를 호출 Read() 합니다. 즉, 작업이 완료되면 데이터 판독기가 결과 집합 WriteToServer 의 끝에 있는 다른 상태에 있을 수 있습니다.

대량 복사 작업이 진행되는 동안 연결된 대상 SqlConnection 은 처리 중이며 연결에서 다른 작업을 수행할 수 없습니다.

컬렉션은 ColumnMappings 데이터 판독기 열에서 대상 데이터베이스 테이블로 매핑됩니다.

적용 대상

WriteToServer(DataTable, DataRowState)

제공된 DataTable에서 제공된 행 상태와 일치하는 행만을 DestinationTableName 개체의 SqlBulkCopy 속성에 지정된 대상 테이블로 복사합니다.

public:
 void WriteToServer(System::Data::DataTable ^ table, System::Data::DataRowState rowState);
public void WriteToServer (System.Data.DataTable table, System.Data.DataRowState rowState);
member this.WriteToServer : System.Data.DataTable * System.Data.DataRowState -> unit
Public Sub WriteToServer (table As DataTable, rowState As DataRowState)

매개 변수

table
DataTable

대상 테이블로 복사될 행이 포함된 DataTable입니다.

rowState
DataRowState

DataRowState 열거형의 값입니다. 행 상태가 일치하는 행만 대상에 복사됩니다.

예외

SqlBulkCopyColumnOrderHint 유효한 대상 열 이름을 지정하지 않았습니다.

예제

다음 콘솔 애플리케이션에는 대량으로 하는 방법을 보여 줍니다.의 행만 로드는 DataTable 와 일치 하는 지정된 된 상태입니다. 이 경우 변경되지 않은 행만 추가됩니다. 대상 테이블은 AdventureWorks 데이터베이스의 테이블입니다.

이 예제에서는 런타임에 가 DataTable 만들어지고 3개의 행이 추가됩니다. 메서드를 WriteToServer 실행하기 전에 행 중 하나가 편집됩니다. 메서드는 WriteToServer 인수를 사용하여 DataRowState.UnchangedrowState 호출되므로 변경되지 않은 두 행만 대상에 대량 복사됩니다.

중요

이 샘플은 가져올 대량 복사 샘플 설정에 설명된 대로 작업 테이블을 만들지 않은 경우 실행되지 않습니다. 이 코드는 SqlBulkCopy를 사용하는 구문을 보여 주는 용도로 제공됩니다. 원본 테이블과 대상 테이블이 동일한 SQL Server 인스턴스에 있는 경우 Transact-SQL INSERT … SELECT 문을 사용하여 데이터를 복사하는 것이 더 쉽고 빠릅니다.

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a connection to the AdventureWorks database.
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            connection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                connection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Make a change to one of the rows in the DataTable.
            DataRow row = newProducts.Rows[0];
            row.BeginEdit();
            row["Name"] = "AAA";
            row.EndEdit();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write unchanged rows from the source to the destination.
                    bulkCopy.WriteToServer(newProducts, DataRowState.Unchanged);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // 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 DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

        // Return the new DataTable. 
        return newProducts;
    }
    private static string GetConnectionString()
    // To avoid storing the connection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

설명

인수에 DataTable 표시되고 삭제되지 않은 상태에 있는 rowState 의 행만 대상 테이블에 복사됩니다.

참고

가 지정된 Unchanged경우 Deleted , AddedModified 행도 서버에 복사됩니다. 예외는 발생하지 않습니다.

대량 복사 작업이 진행되는 동안 연결된 대상 SqlConnection 은 처리 중이며 연결에서 다른 작업을 수행할 수 없습니다.

컬렉션은 ColumnMappings 열에서 DataTable 대상 데이터베이스 테이블로 매핑됩니다.

적용 대상