C#のDataSetの構造を複製するCloneメソッド

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

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

 

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

 

DataSetの構造を複製する

DataSetクラスには複雑に設計されたカラムなどの構造を複製する為のCloneメソッドが用意されています。

  

同じ構造が必要になった場合は、Cloneメソッドを使って新たなオブジェクトを作成する事が出来ます。

            //複製元の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 cloneSet = dset.Clone();
            Console.WriteLine("フィールド数:" + cloneSet.Tables[0].Columns.Count); // Columnsは2個
            Console.WriteLine("レコード数  :" + cloneSet.Tables[0].Rows.Count);    // Rowsは0個!

Cloneメソッドではデータは複製されない

Cloneメソッドが複製するのは構造のみでデータの値は複製されません。

データも含めて複製したい場合は Copyメソッドを使いましょう。