いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

ADO.NET入門記-025 (System.Data.DataTableについて(04) (スキーマとデータのコピー) (DataTable, Clone, Copy))


次は、データテーブルのコピー機能についてです。
これも、よく利用するのでメモメモ。


データテーブルのコピー機能には、以下の2種類があります。

  1. スキーマのみのコピー
  2. スキーマとデータのコピー


スキーマのみのコピーには、以下のメソッドを利用します。

DataTable.Clone()


スキーマとデータのコピーには、以下のメソッドを利用します。

DataTable.Copy()


用途によって、使い分けます。
よく利用するのは、Cloneの方ですかね。データの処理を行う上で
Aのデータテーブルと同じ構造のBを新たに作成して、Bにデータを追加して
いって、最後にマージするとかはよくやります。


マージについては、次回メモする予定です。


以下、サンプルです。

#region DataTableSamples-03
    public class DataTableSamples03 : IExecutable {

        public void Execute() {
            DataTable tableA = new DataTable();

            tableA.Columns.Add("Val", typeof(int));

            for(int i = 0; i < 10; i++) {
                tableA.LoadDataRow(new object[]{i}, true);
            }

            Console.WriteLine("[TableA] ColumnCount = {0}" , tableA.Columns.Count);
            Console.WriteLine("[TableA]RowCount = {0}" , tableA.Rows.Count);

            //
            // tableAのスキーマをtableBにコピー.
            // (データはコピーしない。)
            //
            DataTable tableB = tableA.Clone();
            Console.WriteLine("[TableB] ColumnCount = {0}" , tableB.Columns.Count);
            Console.WriteLine("[TableB]RowCount = {0}" , tableB.Rows.Count);

            //
            // tableAのスキーマとデータをtableCにコピー.
            //
            DataTable tableC = tableA.Copy();
            Console.WriteLine("[TableC] ColumnCount = {0}" , tableC.Columns.Count);
            Console.WriteLine("[TableC]RowCount = {0}" , tableC.Rows.Count);
        }
    }
#endregion