次の方法で共有


SqlBulkCopy コンストラクター

定義

オーバーロード

SqlBulkCopy(SqlConnection)

指定した の開いているインスタンスを SqlBulkCopy 使用して、 クラスの SqlConnection 新しいインスタンスを初期化します。

SqlBulkCopy(String)

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

SqlBulkCopy(String, SqlBulkCopyOptions)

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

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

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

SqlBulkCopy(SqlConnection)

指定した の開いているインスタンスを SqlBulkCopy 使用して、 クラスの SqlConnection 新しいインスタンスを初期化します。

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection)

パラメーター

connection
SqlConnection

既に接続の確立されている SqlConnection のインスタンス。一括コピー操作を実行するために使用されます。 接続文字列で を使用しない場合Integrated Security = true を使用 SqlCredential すると、ユーザー ID とパスワードを接続文字列のテキストとして指定するよりも安全にユーザー ID とパスワードを渡すことができます。

次のコンソール アプリケーションは、既に開いている接続を使用してデータを一括読み込む方法を示しています。 この例では、SqlDataReader を使用し、SQL Server の AdventureWorks データベースに格納された Production.Product テーブルのデータを、同じデータベース内の同等のテーブルにコピーします。 この例は、デモンストレーション目的のみで提供されます。 を使用 SqlBulkCopy して、運用アプリケーション内の同じデータベース内のテーブル間でデータを移動することはできません。 ソース データは、SQL Serverに配置する必要はありません。に読み取ることができるデータ ソースや にIDataReader読み込むことができるデータ ソースをDataTable使用できます。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、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();

            // 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;";
    }
}

注釈

インスタンスの初期化時に接続は既に SqlBulkCopy 開いているため、インスタンスを閉じた後 SqlBulkCopy も接続は開いたままです。 引数が connection null の場合は、 ArgumentNullException がスローされます。

適用対象

SqlBulkCopy(String)

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

public:
 SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy (string connectionString);
new Microsoft.Data.SqlClient.SqlBulkCopy : string -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String)

パラメーター

connectionString
String

接続を定義する文字列。これによって確立された接続が、SqlBulkCopy のインスタンスによって使用されます。 接続文字列で を使用しない場合Integrated Security = trueでは、 または SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)SqlCredential を使用SqlBulkCopy(SqlConnection)して、ユーザー ID とパスワードを接続文字列のテキストとして指定するよりも安全にユーザー ID とパスワードを渡すことができます。

例外

が空の文字列の場合 connectionString は、 ArgumentException がスローされます。

次のコンソール アプリケーションは、文字列として指定された接続を使用してデータを一括読み込む方法を示しています。 インスタンスが閉じられると、接続は自動的に SqlBulkCopy 閉じられます。 この例では、ソース データは最初にSQL Server テーブルからインスタンスにSqlDataReader読み取られます。 ソース データは、SQL Serverに配置する必要はありません。に読み取ることができるデータ ソースや にIDataReader読み込むことができるデータ ソースをDataTable使用できます。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、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;";
    }
}

注釈

接続は、一括コピー操作の最後に自動的に閉じられます。 が null の場合 connectionString は、 ArgumentNullException がスローされます。 が空の文字列の場合 connectionString は、 ArgumentException がスローされます。

適用対象

SqlBulkCopy(String, SqlBulkCopyOptions)

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

public:
 SqlBulkCopy(System::String ^ connectionString, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy (string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new Microsoft.Data.SqlClient.SqlBulkCopy : string * Microsoft.Data.SqlClient.SqlBulkCopyOptions -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String, copyOptions As SqlBulkCopyOptions)

パラメーター

connectionString
String

接続を定義する文字列。これによって確立された接続が、SqlBulkCopy のインスタンスによって使用されます。 接続文字列で を使用しない場合Integrated Security = trueでは、 または SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)SqlCredential を使用SqlBulkCopy(SqlConnection)して、ユーザー ID とパスワードを接続文字列のテキストとして指定するよりも安全にユーザー ID とパスワードを渡すことができます。

copyOptions
SqlBulkCopyOptions

コピー先のテーブルにコピーするデータ ソース行を決定する、SqlBulkCopyOptions 列挙型の値の組み合わせ。

次のコンソール アプリケーションは、文字列として指定された接続を使用して一括読み込みを実行する方法を示しています。 変換先テーブルを読み込むときに、ソース テーブルの ID 列の値を使用するようにオプションが設定されています。 この例では、ソース データは最初にSQL Server テーブルからインスタンスにSqlDataReader読み取られます。 ソース テーブルとコピー先テーブルには、それぞれ ID 列が含まれます。 既定では、 Id 列の新しい値は、追加された各行の変換先テーブルに生成されます。 この例では、接続を開いたときにオプションが設定され、一括読み込みプロセスでソース テーブルの ID 値が強制的に使用されます。 オプションによって一括読み込みの動作方法がどのように変わるかを確認するには、dbo を使用してサンプルを実行します 。BulkCopyDemoMatchingColumns テーブルが空です。 すべての行がソースから読み込まれます。 次に、テーブルを空にせずにサンプルをもう一度実行します。 例外がスローされ、主キー制約違反のために行が追加されなかったことを通知するメッセージがコンソールに書き込まれます。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、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();

            // Create the SqlBulkCopy object using a connection string 
            // and the KeepIdentity option. 
            // 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, SqlBulkCopyOptions.KeepIdentity))
            {
                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;";
    }
}

注釈

トピックのすべての一括コピー オプションに関する詳細情報を SqlBulkCopyOptions 取得できます。

適用対象

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

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

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions, Microsoft::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection * Microsoft.Data.SqlClient.SqlBulkCopyOptions * Microsoft.Data.SqlClient.SqlTransaction -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection, copyOptions As SqlBulkCopyOptions, externalTransaction As SqlTransaction)

パラメーター

connection
SqlConnection

既に接続の確立されている SqlConnection のインスタンス。一括コピーを実行するために使用されます。 接続文字列で を使用しない場合Integrated Security = true を使用 SqlCredential すると、ユーザー ID とパスワードを接続文字列のテキストとして指定するよりも安全にユーザー ID とパスワードを渡すことができます。

copyOptions
SqlBulkCopyOptions

コピー先のテーブルにコピーするデータ ソース行を決定する、SqlBulkCopyOptions 列挙型の値の組み合わせ。

externalTransaction
SqlTransaction

一括コピーを実行する既存の SqlTransaction インスタンス。

注釈

オプションに が含まれ UseInternalTransaction 、引数が externalTransaction null でない場合は、 InvalidArgumentException がスローされます。

トランザクションでの使用方法 SqlBulkCopy を示す例については、「 トランザクションと一括コピー操作」を参照してください。

こちらもご覧ください

適用対象