C#のDataSetのデータを複製するCopyメソッド

C#にはデータベースから取得したデータをメモリ上に格納する為の「System.Data.DataSet」クラスがあります。

DataSetクラスはとても柔軟に構造を定義して値を格納する事ができるクラスです。

 

DataSetクラスは複数のDataTableクラスを持つことが可能で、DataTableクラスは複数のカラムを自由に設計する事が出来ます。

 


DataSetの構造とデータを複製する

DataSetクラスには複雑に設計されたデータを複製する為のCopyメソッドが用意されています。

データの複製が必要になった場合は、Copyメソッドを使って新たなオブジェクトを作成する事が出来ます。

            //複製元のDataSetを作成
            var dset = new DataSet();
            var dtab = new DataTable("Table1");
            dset.Tables.Add(dtab);
            var fld1 = new DataColumn("Field1", typeof(int));
            dtab.Columns.Add(fld1);
            var fld2 = new DataColumn("Field2", typeof(string));
            dtab.Columns.Add(fld2);

            var row1 = dtab.NewRow();
            row1["Field1"] = 1;
            row1["Field2"] = "壱";
            dtab.Rows.Add(row1);
            var row2 = dtab.NewRow();
            row2["Field1"] = 2;
            row2["Field2"] = "弐";
            dtab.Rows.Add(row2);

            Console.WriteLine("フィールド数:" + dset.Tables[0].Columns.Count);      // Columnsは2個
            Console.WriteLine("レコード数  :" + dset.Tables[0].Rows.Count);         // Rowsは2個


            //複製したオブジェクトを作成
            var copySet = dset.Copy();
            Console.WriteLine("フィールド数:" + copySet.Tables[0].Columns.Count);   // Columnsは2個
            Console.WriteLine("レコード数  :" + copySet.Tables[0].Rows.Count);      // Rowsは2個

構造のみを複製したい場合はCloneメソッド

Copyメソッドはデータを複製します。

同じカラム構造を持った空のオブジェクトが必要な場合はCloneメソッドを使いましょう。