Language

SqlBulkCopy クラス

定義

別のソースからのデータを含むSQL Server テーブルを効率的に一括読み込みできます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

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 テーブルのデータを、同じデータベース内の同等のテーブルにコピーします。

Important

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、SqlBulkCopy だけを使用した構文について説明します。 ソース テーブルと変換先テーブルが同じ SQL Server インスタンス内にある場合は、Transact-SQL INSERT ... SELECT ステートメントを使用してデータをコピーする方が簡単かつ迅速です。

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 という名前の一般的なコマンド プロンプト ユーティリティが含まれています。これは、1 つのサーバー上でもサーバー間でも、テーブル間でデータを移動するためのユーティリティです。 SqlBulkCopy クラスを使用すると、同様の機能を提供するマネージド コード ソリューションを記述できます。 SQL Server テーブルにデータを読み込む方法は他にもありますが (INSERT ステートメントなど)、SqlBulkCopy を使用する方が大幅にパフォーマンスが向上します。

SqlBulkCopy クラスを使用すると、SQL Server のテーブルにのみデータを書き込むことができます。 ただし、データ ソースはSQL Serverに限定されません。DataTable インスタンスにデータを読み込むか、IDataReader インスタンスで読み取ることができる限り、任意のデータ ソースを使用できます。

SqlBulkCopy は、DataTable 型のSqlDateTime 列を、SQL Server 2008 で追加された日付/時刻型の 1 つであるSQL Server列に一括読み込みするときに失敗します。

コンストラクター

Name 説明
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

SqlBulkCopyの指定された既存のオープン インスタンスを使用して、SqlConnection クラスの新しいインスタンスを初期化します。 SqlBulkCopy インスタンスは、copyOptions パラメーターで指定されたオプションに従って動作します。 null 以外の SqlTransaction が指定されている場合、コピー操作はそのトランザクション内で実行されます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

SqlBulkCopy(SqlConnection)

SqlBulkCopy の指定されたオープン インスタンスを使用して、SqlConnection クラスの新しいインスタンスを初期化します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

SqlBulkCopy(String, SqlBulkCopyOptions)

指定された SqlConnection に基づいて、connectionString の新しいインスタンスを初期化して開きます。 コンストラクターはその SqlConnection を使用して、 SqlBulkCopy クラスの新しいインスタンスを初期化します。 SqlConnection インスタンスは、copyOptions パラメーターで指定されたオプションに従って動作します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

SqlBulkCopy(String)

指定された SqlConnection に基づいて、connectionString の新しいインスタンスを初期化して開きます。 コンストラクターは、SqlConnection を使用して、SqlBulkCopy クラスの新しいインスタンスを初期化します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

プロパティ

Name 説明
BatchSize

各バッチに含まれる行数。 各バッチの最後に、バッチ内の行がサーバーに送信されます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

BulkCopyTimeout

操作がタイムアウトするまでに完了する秒数。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

ColumnMappings

SqlBulkCopyColumnMapping項目のコレクションを返します。 列のマッピングでは、データ ソース内の列とコピー先の列の間の関係を定義します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

DestinationTableName

サーバー上にあるコピー先のテーブルの名前。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

EnableStreaming

SqlBulkCopy オブジェクトからデータをストリーミングするIDataReader オブジェクトを有効または無効にします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

NotifyAfter

通知イベントを生成する前に処理する行数を定義します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

メソッド

Name 説明
Close()

SqlBulkCopy インスタンスを閉じます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
WriteToServer(DataRow[])

指定したDataRow配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行をコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServer(DataTable, DataRowState)

指定したDataTableの指定された行の状態と一致する行のみを、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServer(DataTable)

指定された DataTable のすべての行を、DestinationTableName オブジェクトの SqlBulkCopy プロパティで指定される宛先テーブルにコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServer(DbDataReader)

指定したDbDataReader配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行をコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServer(IDataReader)

指定された IDataReader のすべての行を、DestinationTableName オブジェクトの SqlBulkCopy プロパティで指定される宛先テーブルにコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(DataRow[], CancellationToken)

WriteToServer(DataRow[])の非同期バージョン。指定されたDataRow配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行がコピーされます。

      <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[])

WriteToServer(DataRow[])の非同期バージョン。指定されたDataRow配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行がコピーされます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(DataTable, CancellationToken)

WriteToServer(DataTable)の非同期バージョン。指定されたDataTable内のすべての行を、DestinationTableName オブジェクトの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, CancellationToken)

WriteToServer(DataTable, DataRowState)の非同期バージョン。指定されたDataTableの指定された行の状態と一致する行のみが、DestinationTableName オブジェクトの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)

WriteToServer(DataTable, DataRowState)の非同期バージョン。指定されたDataTableの指定された行の状態と一致する行のみが、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定された変換先テーブルにコピーされます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(DataTable)

WriteToServer(DataTable)の非同期バージョン。指定されたDataTable内のすべての行を、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定された変換先テーブルにコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(DbDataReader, CancellationToken)

WriteToServer(DbDataReader)の非同期バージョン。指定されたDbDataReader配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行がコピーされます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(DbDataReader)

WriteToServer(DbDataReader)の非同期バージョン。指定されたDbDataReader配列から、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定されたコピー先テーブルにすべての行がコピーされます。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

WriteToServerAsync(IDataReader, CancellationToken)

WriteToServer(IDataReader)の非同期バージョン。指定されたIDataReader内のすべての行を、DestinationTableName オブジェクトの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(IDataReader)

WriteToServer(IDataReader)の非同期バージョン。指定されたIDataReader内のすべての行を、DestinationTableName オブジェクトのSqlBulkCopy プロパティで指定された変換先テーブルにコピーします。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

イベント

Name 説明
SqlRowsCopied

NotifyAfter プロパティで指定された行数が処理されるたびに発生します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

明示的なインターフェイスの実装

Name 説明
IDisposable.Dispose()

SqlBulkCopy クラスの現在のインスタンスで使用されているすべてのリソースを解放します。

新しい開発では、Microsoftを使用します。Data.SqlClient。 このページでは、System.Data.SqlClient について説明します。

適用対象

関連項目