【C#】データテーブルとデータテーブルをマージする【DataTable】

データテーブルのマージをする

「dt.Merge」を使用します。

今回は、HINMEI(品名)に対してプライマリキーの設定をしています。

※プライマリキーの設定がないと、正しくマージされないので注意です。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    dt.PrimaryKey = new DataColumn[] { dt.Columns["HINMEI"] };
    
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */     
    DataTable dtMerge = dt.Copy();

    dt.Rows[1]["SURYO"] = 100;
    dt.AcceptChanges();

    // データテーブルのマージをする
    dtMerge.Merge(dt);


コピペですぐ試せるソースコード

今回は、まとめる必要がありませんでしたが、メソッド形式のソースコードも記載したいので載せます。

ソースコードをコピペするとそれぞれの動作が確認できると思います。


        private void DataTable_Merge()
        {
            DataTable dt = new DataTable();

            // データテーブルの名前を指定
            dt.TableName = "FRUIT";

            // 列追加
            dt.Columns.Add("HINMEI");
            dt.Columns.Add("SURYO");
            dt.Columns.Add("TANKA");
            dt.Columns.Add("KINGAKU");
            dt.PrimaryKey = new DataColumn[] { dt.Columns["HINMEI"] };
    
            // 行追加
            dt.Rows.Add("りんご", "3", "50", "150");
            dt.Rows.Add("ぶどう", "1", "200", "200");
            dt.Rows.Add("みかん", "10", "30", "300");

            /* 
              今回の内容はここから
            */     
            DataTable dtMerge = dt.Copy();

            dt.Rows[1]["SURYO"] = 100;
            dt.AcceptChanges();

            // データテーブルのマージをする
            dtMerge.Merge(dt);
        }


まとめ

プライマリキーの設定がされていない場合は、

データが重複して追加されてしまいますが、これが少し詰まったところでした。

マージを使う場合は、必ず設定しましょう。


Microsoft 公式ページ

DataTable.Merge メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datatable.merge?view=netframework-4.0