次の方法で共有


SqlBulkCopyColumnMapping クラス

定義

SqlBulkCopy インスタンスのデータ ソースと、インスタンスのコピー先テーブル間の列のマップを定義します。

public ref class SqlBulkCopyColumnMapping sealed
public sealed class SqlBulkCopyColumnMapping
type SqlBulkCopyColumnMapping = class
Public NotInheritable Class SqlBulkCopyColumnMapping
継承
SqlBulkCopyColumnMapping

次の例では、AdventureWorks サンプル データベースのソース テーブルから、同じデータベース内のコピー先テーブルにデータを一括コピーします。 変換先の列数はソース内の列数と一致し、各変換先列は対応するソース列と同じ序数位置にありますが、列名は一致しません。 SqlBulkCopyColumnMapping オブジェクトは、一括コピーの列マップを作成するために使用されます。

重要

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

using System;
using System.Data;
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.BulkCopyDemoDifferentColumns;",
                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 (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoDifferentColumns";

                // Set up the column mappings by name.
                SqlBulkCopyColumnMapping mapID =
                    new SqlBulkCopyColumnMapping("ProductID", "ProdID");
                bulkCopy.ColumnMappings.Add(mapID);

                SqlBulkCopyColumnMapping mapName =
                    new SqlBulkCopyColumnMapping("Name", "ProdName");
                bulkCopy.ColumnMappings.Add(mapName);

                SqlBulkCopyColumnMapping mapNumber =
                    new SqlBulkCopyColumnMapping("ProductNumber", "ProdNum");
                bulkCopy.ColumnMappings.Add(mapNumber);

                // Write from the source to the destination.
                try
                {
                    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;";
    }
}

注釈

列マッピングは、データ ソースとターゲット テーブルの間のマッピングを定義します。

マッピングが定義されていない場合 (つまり、コレクションは空です)、 ColumnMappings 列は序数位置に基づいて暗黙的にマップされます。 これを行うには、コピー元のスキーマとコピー先のスキーマが一致する必要があります。 そうでない場合は、 InvalidOperationException がスローされます。

コレクションが ColumnMappings 空でない場合は、データ ソースに存在するすべての列を指定する必要はありません。 コレクションによってマップされていないものは無視されます。

コピー元とコピー先の列は、名前か序数のいずれかで参照できます。 同じマッピング コレクション内で、名前と序数による列参照を混在させることもできます。

コンストラクター

SqlBulkCopyColumnMapping()

新しい SqlBulkCopyColumnMapping オブジェクトを初期化するパラメーターなしのコンストラクター。

SqlBulkCopyColumnMapping(Int32, Int32)

コピー元とコピー先の列をどちらも序数で参照して、新しい列マップを作成します。

SqlBulkCopyColumnMapping(Int32, String)

コピー元を列の序数で、コピー先を列の名前で参照して、新しい列マップを作成します。

SqlBulkCopyColumnMapping(String, Int32)

コピー元を列名で、コピー先を列の序数で参照して、新しい列マップを作成します。

SqlBulkCopyColumnMapping(String, String)

コピー元とコピー先の列をどちらも列名で参照して、新しい列マップを作成します。

プロパティ

DestinationColumn

コピー先データベース テーブルにおけるマップ対象の列名。

DestinationOrdinal

コピー先テーブルにおけるコピー先列の序数値。

SourceColumn

データ ソースにおけるマップ対象の列名。

SourceOrdinal

データ ソースにおけるコピー元列の序数位置。

適用対象