次の方法で共有


SqlBulkCopyColumnMappingCollection クラス

定義

CollectionBase から継承した SqlBulkCopyColumnMapping オブジェクトのコレクション。

public ref class SqlBulkCopyColumnMappingCollection sealed : System::Collections::CollectionBase
public sealed class SqlBulkCopyColumnMappingCollection : System.Collections.CollectionBase
type SqlBulkCopyColumnMappingCollection = class
    inherit CollectionBase
Public NotInheritable Class SqlBulkCopyColumnMappingCollection
Inherits CollectionBase
継承
SqlBulkCopyColumnMappingCollection

次の例では、AdventureWorks サンプル データベースのソース テーブルから、同じデータベース内のコピー先テーブルにデータを一括コピーします。 変換先の列数はソース内の列数と一致しますが、列名と序数は一致しません。 SqlBulkCopyColumnMapping は、 オブジェクトの に SqlBulkCopyColumnMappingCollection 追加され SqlBulkCopy 、一括コピーの列マップを作成します。

重要

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

                // The column order in the source doesn't match the order 
                // in the destination, so ColumnMappings must be defined.
                bulkCopy.ColumnMappings.Add("ProductID", "ProdID");
                bulkCopy.ColumnMappings.Add("Name", "ProdName");
                bulkCopy.ColumnMappings.Add("ProductNumber", "ProdNum");

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

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

プロパティ

Item[Int32]

指定したインデックス位置にある SqlBulkCopyColumnMapping オブジェクトを取得します。

メソッド

Add(Int32, Int32)

コピー元とコピー先の列をいずれも序数で指定することによって、新しい SqlBulkCopyColumnMapping を作成し、コレクションに追加します。

Add(Int32, String)

コピー元の列には序数を、コピー先の列には文字列を使用して新しい SqlBulkCopyColumnMapping を作成し、コレクションに追加します。

Add(SqlBulkCopyColumnMapping)

指定したマップを SqlBulkCopyColumnMappingCollection に追加します。

Add(String, Int32)

コピー元の列には列名を、コピー先の列には序数を使用して新しい SqlBulkCopyColumnMapping を作成し、コレクションに追加します。

Add(String, String)

コピー元とコピー先の列をいずれも列名で指定することによって、新しい SqlBulkCopyColumnMapping を作成し、コレクションに追加します。

Clear()

コレクションの内容を消去します。

Contains(SqlBulkCopyColumnMapping)

指定した SqlBulkCopyColumnMapping オブジェクトがコレクション内に存在するかどうかを示す値を取得します。

CopyTo(SqlBulkCopyColumnMapping[], Int32)

SqlBulkCopyColumnMappingCollection の要素を、SqlBulkCopyColumnMapping アイテムの配列にコピーします (特定のインデックスからコピーが開始されます)。

IndexOf(SqlBulkCopyColumnMapping)

指定した SqlBulkCopyColumnMapping オブジェクトのインデックスを取得します。

Insert(Int32, SqlBulkCopyColumnMapping)

指定されたインデックス位置に、新しい SqlBulkCopyColumnMapping を挿入します。

Remove(SqlBulkCopyColumnMapping)

指定された SqlBulkCopyColumnMapping 要素 を SqlBulkCopyColumnMappingCollection から削除します。

RemoveAt(Int32)

指定したインデックス位置にあるマップをコレクションから削除します。

適用対象